演算法練習篇之 重建二叉樹

2021-09-27 12:20:13 字數 1453 閱讀 6061

重建二叉樹。

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

本題中,我們需要先搞清楚兩個概念,前序遍歷與中序遍歷。

前序遍歷:先訪問根節點,然後前序遍歷其左子樹,再前序遍歷其右子樹。(跟左右

中序遍歷:中序遍歷根節點的左子樹,再遍歷根節點,後再遍歷根節點的右子樹。(左跟右

從上面的概念我們或許有了些思路,首先前序遍歷是先訪問根節點的,我們知道二叉樹的根節點後,再去中序遍歷找到根節點的位置,依據中序遍歷原則,顯而易見,中序遍歷中,根節點左半部分就是左子樹右半部分就是右子樹。那下面呢?同理將前序遍歷中第二個節點找到其在中序遍歷中的位置,又可以將其分為左右子樹結構,這種思想就是遞迴

(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在樹的右節點。此時我們可...