剑指offer07.重建二叉树
生活随笔
收集整理的這篇文章主要介紹了
剑指offer07.重建二叉树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
劍指offer07重建二叉樹
題目 :
輸入某二叉樹的前序遍歷和中序遍歷的結果,請構建該二叉樹并返回其根節點。
假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。
示例 :
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
思路:
要根據給出的前序和中序遍歷,先確定樹的根節點,左子樹的范圍,右子樹的范圍
這樣的話就能快速的寫出代碼
前序遍歷 : [根節點 | 左子樹 | 右子數] 根左右
中序遍歷 : [左子樹 | 根節點 | 右子數] 左根右
1.
先找到根節點為3,那么前序的后面四個就是子樹的范圍
然后看中序遍歷的節點值為3的那個點,9位于3的左邊,那么他就是在左子樹
15,20,7 在3的右邊,那么他們是右子數里面的節點
- 前序 : [3 | 9 | 20,15,7]
- 中序 : [9 | 3 | 15,20,7]
那我們現在至少可以畫出個這樣的圖
2.那么第一個的樹基本結構就已經完成了
再將他細分
樹可以分為左子樹右子樹,根節點
但是右子樹又能看做一個樹來排部
其實這就是一個遞歸的過程
分析方法和第一步一樣
右子數的前序 : [20 | 15 | 7]
右子數的中序 : [15 | 20 | 7]
這樣就將一個樹分成多個部分,多個部分又能劃分為更小的部分
這樣一步一步的往下走那么就能將整個數給劃分出來
這樣我們就能夠根據這個思路來寫出算法
遞歸的實現
需要進行判斷哦
若是測試用例傳入為空可能就會報錯
這樣我們就能夠構建一顆給定的二叉樹了
總結
以上是生活随笔為你收集整理的剑指offer07.重建二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer06.从尾到头打印链表
- 下一篇: java 中 a = a++ 的分析