思路:
前序遍歷的第乙個節點就是當前的根節點
在中序遍歷中找到根節點
中序遍歷根節點左邊的節點就是根節點左子樹,右邊的就是右子樹,假設左子樹n
n個節點,右子樹m
m個節點
前序遍歷第乙個元素後的n
n個節點是屬於左子樹的,剩下的是右子樹的
分別得到了左、右子樹的前序遍歷序列和中序遍歷序列,形成子問題遞迴
其中第二步也可以借助乙個map來提高檢索效率
/**
* @classname solution
* @description 重建二叉樹
* @date 2019/12/17 15:36
* @created by cheng
*/public
class
solution
private treenode recursion
(int
pre,
int prestart,
int preend,
int[
] in,
int instart,
int inend)
int val = pre[prestart]
; treenode ret =
newtreenode
(pre[prestart]);
for(
int i = instart; i <= inend; i++)}
return ret;
}}
4 重建二叉樹
測試通過 時間限制 1秒 空間限制 32768k 題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。時間限制 1秒空間限制 32768k 本題知識點 查詢 牛客網陣列題目鏈...
4 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。例如前序遍歷序列和中序遍歷序列為和,假設結果中無重複的數字。重建二叉樹並返回 1 前序遍歷二叉樹的形式為 根節點,左子樹,右子樹 中序遍歷二叉樹的形式為 左子樹,根節點,右子樹 因此我們需要把前序遍歷的第乙個結果new乙個treenode 出來...
4 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。先序序列第乙個數就是根結點而後是左子樹的先序序列和右子樹的先序序列,而中序序列是先是左子樹的中序序列,然後是根結點,最後是右子樹的中...