輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
第 n +1
n+1n+
1 次遇到這種題目了,簡單寫一下思路吧。
想看更詳細解析的可以看這篇:l2-006 樹的遍歷-團體程式設計天梯賽gplt
/**
* definition for binary tree
* public class treenode
* }*/public
class
solution
//[la,ra]為前序遍歷序列範圍,[lb,rb]為中序遍歷序列的範圍
public treenode buildtree
(int
pre,
int[
] in,
int la,
int ra,
int lb,
int rb)
//num表示根節點的權值
int num = pre[la]
; treenode rt =
newtreenode
(num)
;//p表示根節點在中序遍歷序列中的位置
int p = lb;
while
(p <= rb && in[p]
!= num) p++
;//cnt表示左子樹節點的個數
int cnt = p - lb;
//遞迴建樹
rt.left =
buildtree
(pre, in, la +
1, la + cnt, lb, p -1)
; rt.right =
buildtree
(pre, in, la+ cnt +
1, ra, p +
1, rb)
;return rt;
}}
如果本文對你有所幫助,要記得點讚哦~ 劍指Offer(04) 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。通常樹有如下幾種遍歷方式 前序遍歷 先訪問根節點,再訪問左子節點,最後訪問右子節點。中序遍歷 先訪問左子節點,再訪問根節點,最後訪問...
劍指offer04 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。首先要知道二叉樹的三種遍歷方式 先序 中序 後序 先序 根左右 中序 左根右 後序 左右根 如何根據先序和中序 或者中序和後續 重建...
劍指offer04 重建二叉樹
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 設前序遍歷序列為pre,中序遍歷序列為in,則易知 1 root pre 0 2 in 中 root 的位置 索引 將 ...