python 將滿二叉樹轉換成求和樹

2021-09-26 14:11:10 字數 1592 閱讀 9985

思路:

根據前序遍歷和中序遍歷構造樹,唯一的區別在於【根節點的取值】不再是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...