重建二叉樹。
要求:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
本題中,我們需要先搞清楚兩個概念,前序遍歷與中序遍歷。
前序遍歷:先訪問根節點,然後前序遍歷其左子樹,再前序遍歷其右子樹。(跟左右)
中序遍歷:中序遍歷根節點的左子樹,再遍歷根節點,後再遍歷根節點的右子樹。(左跟右)
從上面的概念我們或許有了些思路,首先前序遍歷是先訪問根節點的,我們知道二叉樹的根節點後,再去中序遍歷中找到根節點的位置,依據中序遍歷原則,顯而易見,中序遍歷中,根節點的左半部分就是左子樹,右半部分就是右子樹。那下面呢?同理將前序遍歷中第二個節點找到其在中序遍歷中的位置,又可以將其分為左右子樹結構,這種思想就是遞迴。
(ps.中序遍歷與前序或者後序,分別結合都可以重建二叉樹結構,後序與中序的思想與本題思想一致!)
去部落格設定頁面,選擇一款你喜歡的**片高亮樣式,下面展示同樣高亮的**片
.
class
treenode
treenode
(int val)
treenode()
}public
class
reconstructtree
treenode root=
newtreenode
(pre[startpre]);
for(int i=startin;i<=endin;i++)}
return root;
}public
static
void
main
(string[
] args)
; intin
=;reconstructtree test=
newreconstructtree()
; treenode node = test.
reconstruct
(pre,
0,pre.length-1,
in,0,
in.length-1)
; system.out.
println
(node.right.val);}
}
二叉樹習題之重建二叉樹
對於給定前序和中序的重建方法。1 前序的第乙個元素一定是樹的根節點,在中序集合中找到此元素,那麼該元素的左面即為根的左子樹,右面為右子樹。2 找到前序的第二個元素,重複上面的步驟。自寫程式的效率大概為 n n 2 或最大的那個元素 這點很坑,斟酌改掉 目前沒發現更快的寫法 自己寫 結果以連續記憶體的...
練習題之重建二叉樹
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。實現 definition for binary tree public class treenode 遞迴實現 public...
二叉樹 重建二叉樹
問題 給定二叉樹的前序遍歷結果和中序遍歷結果,恢復出原二叉樹。假設二叉樹中的元素都不重複,給定二叉樹的前序遍歷序列,二叉樹的中序遍歷序列。看到此題,我首先想到的是尋找根節點,由前序遍歷序列可以看出根節點為1,此時通過中序遍歷可以看出來4,7,2在根節點的左子樹,5,3,8,6在樹的右節點。此時我們可...