思路:
根據前序遍歷和中序遍歷構造樹,唯一的區別在於【根節點的取值】不再是root.val而是sum(pre[1:])除了根節點之外的所有節點和。
class tree:
def __init__(self,x):
self.val = x
self.left = none
self.right = none
pre = list(map(int,input().split()))
tin = list(map(int,input().split()))
def build_tree(pre,tin):
if len(pre) == 0:
return none
i = tin.index(pre[0])
if len(pre) == 1:
root = tree(0)
else:
root = tree(sum(pre[1:]))
left_pre = pre[1:i+1]
left_tin = tin[:i]
right_pre = pre[i+1:]
right_tin = tin[i+1:]
root.left = build_tree(left_pre,left_tin)
root.right = build_tree(right_pre,right_tin)
return root
def midtree(root):
if not root:
return
return midtree(root.left) + [root.val] + midtree(root.right)
root = build_tree(pre,tin)
res = midtree(root)
print(' '.join(list(map(str,res))))
不需要重新構造樹,直接求list
pre = list(map(int,input().split()))
tin = list(map(int,input().split()))
def tree_list(pre,tin):
if len(pre) == 0:
return
if len(pre) == 1:
return [0]
i = tin.index(pre[0])
left_pre = pre[1:i+1]
left_tin = tin[:i]
right_pre = pre[i+1:]
right_tin = tin[i+1:]
root_left = tree_list(left_pre,left_tin)
root_right = tree_list(right_pre,right_tin)
return root_left + [sum(pre[1:])] + root_right
res = tree_list(pre,tin)
print(' '.join(list(map(str,res))))
將滿二叉樹轉換為求和樹
在網上看到乙個道題目覺的有些意思分享給大家。給滿出二叉樹,編寫演算法將其轉化為求和樹 什麼是求和樹 二叉樹的求和樹,是一顆同樣結構的二叉樹,其樹中的每個節點將包含原始樹中的左子樹和右子樹的和。二叉樹 10 2 6 8 4 7 5 求和樹 20 4 2 12 6 4 8 4 12 7 5 0 0 0 ...
將二叉樹轉換成雙向鍊錶
思路 採用中序遍歷的方法,visit函式須要完畢的功能為 1 當前節點的左子節點指向上一次訪問的節點 2 將上一次訪問節點的右子節點指向當前節點 3 最後更新上一次訪問節點為當前節點。在第二步時須要推斷上一次訪問節點是不是為null,假設是,則第二步改為鍊錶的頭結點指向當前節點。程式例如以下 str...
由二叉樹轉換成二叉排序樹
struct tnode void insertbst tnode t int key if key t key insertbst t left key else insertbst t right key 先序遍歷樹並插入建立排序樹 void preorder tnode t tnode tbs...