相似問題集合:
1.從前序與中序遍歷序列構造二叉樹 leetcode105
2.從中序與後序遍歷序列構造二叉樹 leetcode106
解決套路:
根據給定的前/中/後需遍歷序列,確定root,left,right的位置,然後遞迴解決。
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
# 1.根據前序和中序還原二叉樹
class solution:
def buildtree(self, preorder: list[int], inorder: list[int]) -> treenode:
if not preorder:
return
root = treenode(preorder[0])
i = inorder.index(root.val)
root.left = self.buildtree(preorder[1:i+1], inorder[:i])
root.right = self.buildtree(preorder[i+1:], inorder[i+1:])
return root
# 2.根據中序和後序還原二叉樹
class solution:
def buildtree(self, inorder: list[int], postorder: list[int]) -> treenode:
if not inorder:
return
root = treenode(postorder[-1])
i = inorder.index(postorder[-1])
root.left = self.buildtree(inorder[:i], postorder[:i])
root.right = self.buildtree(inorder[i+1:], postorder[i:-1])
return root
資料結構 二叉樹的重構
問題描述 已知二叉樹的先序和中序序列,然後還原該二叉樹。1 首先通過先序遍歷找到首元素即為根節點。2 再通過中序遍歷找到根節點的左邊序列,即為左子樹,根節點的右邊即為右子樹。3 再對二叉樹的左子樹和右子樹進行遞迴,遞迴到葉子結點,遞迴結束。struct treenode reconstructbin...
資料結構與演算法 重構二叉樹
給你一顆二叉樹,然後讓你用 實現建立的過程,緊接著用 實現它的前序,中序,後序遍歷。例如給妮這樣一顆二叉樹 如下 注釋很清楚 package jzoffer 二叉樹鏈式儲存 author lsm public class tree 建立一棵二叉樹 a b c d e f param root aut...
Python 二叉樹資料結構
二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 將二叉樹的節點定義為乙個物件,節點之間通過類似鍊錶的鏈結方式來連線。二叉樹的遍歷方式 前序遍歷 eacbdgf 中序遍歷 abcdegf 後序遍歷 bdcafge 層次遍...