2017-04-03 95 views
1

例如:如何找到深度在列表中記述的二叉樹

[[7, 0, 0], [2, 10, 11], [4, 9, 0], [6, 0, 0], [1, 8, 12], [9, 0, 2], [13, 0, 6], [5, 4, 3], [12, 0, 0], [10, 0, 0], [11, 0, 0], [3, 1, 13], [8, 7, 0]] Root=5

列表包含一個子列表的第一個值是節點,第二個值是在左邊的孩子和第三個是在右邊的孩子。 0意味着沒有孩子左/右,我想找到每個節點的深度並提取相同深度的節點。

p = lable.index(r)  
depth_list = []  
depth = 0  
depth_list.append([r, 0])  
while lable_left_right[p][1] != 0 or lable_left_right[p][2] != 0:  
    depth += 1  
    left = lable_left_right[p][1]  
    right = lable_left_right[p][2] 
    if left == 0 and right != 0:  
     p = right  
     depth_list.append([p, depth]) 
     continue 
    if right == 0 and left != 0: 
     p = left 
     depth_list.append([p, depth]) 
     continue 
    if left != 0 and right != 0: 
     p = right 
     depth_list.append([p, depth]) 
     p = left 
     depth_list.append([p, depth])  
     continue 

lable是(所有節點的列表,在這種情況下,[7,2,4,6,1,9,13,5,12,10,11,3,8]r是根。lable_left_right是給定列表中
我堅持,如果節點有兩個孩子,但我只能用一個p繼續while循環,所以我會失去另一個孩子作爲一個節點來完成任務 是否有可能在一個while循環的中心啓動另一個while循環並繼續處理原始循環?如果不是,有沒有另一種方法來獲得所有節點的深度?

+0

我不會立即得到語法。 '[7,0,0]'中'0'的語義是什麼? –

+0

0表示左側/右側無子女 –

+0

這是一個以ID列表形式給出的樹。節點5有兩個孩子,節點4和3.節點4有一個孩子,9(左邊)。這就是爲什麼根節點分開指定的原因。 – BurnsBA

回答

0

This c使用下面的遞歸方法來解決:

tree = [[7, 0, 0], [2, 10, 11], [4, 9, 0], [6, 0, 0], [1, 8, 12], [9, 0, 2], [13, 0, 6], [5, 4, 3], [12, 0, 0], [10, 0, 0], [11, 0, 0], [3, 1, 13], [8, 7, 0]] 

def getRootNode(): 
    centernodes, leftnodes, rightnodes = map(list, zip(*tree)) 
    for node in centernodes: 
     if (node not in leftnodes) and (node not in rightnodes): 
      return node 

def getLeftNode(n): 
    for i in range(len(tree)): 
     if tree[i][0] == n: 
      return tree[i][1] 

def getRightNode(n): 
    for i in range(len(tree)): 
     if tree[i][0] == n: 
      return tree[i][2] 

def maxDepth(n): 
    if n == 0: 
     return 0 
    else: 
     lDepth = maxDepth(getLeftNode(n)) 
     rDepth = maxDepth(getRightNode(n)) 
     if (lDepth > rDepth): 
      return lDepth+1 
     else: 
      return rDepth+1 

n = getRootNode() 
print("Root Node is " + str(n)) 
depth = maxDepth(n) - 1 
print("Max Depth is " + str(depth))