劍指Offer 04 重建二叉樹(遞迴)

2021-10-03 04:22:44 字數 1047 閱讀 4499

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

第 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 的位置 索引 將 ...