二叉樹重構

2021-07-31 03:58:36 字數 1080 閱讀 3602

//先驗知識:

//前序:第乙個數就是根節點

//中序:根節點位於中間,剛好將其左右子樹分開

//運用方法:遞迴

//找到根節點,將其數值放入value,遞迴的分別根據左右子樹進行二叉樹重建

//根據函式已有的介面,因此,需要將左(右)子樹的前序,中序分別用vector進行賦值

//最後遞迴的對左右進行重建,方法一樣

//關鍵:易錯點——遞迴結束的條件:這裡直接用了length==0,返回null,此時說明該節點是葉子

//每次都是粗心惹的禍,調了一天才發現問題、、、崩潰、、、

struct treenode

};treenode* reconstructbinarytree(vectorpre,vectorvin)

void showtree(treenode* tree)

int main()

; vector inorder=;

treenode* tmp=reconstructbinarytree(preorder,inorder);

showtree(tmp);

}//下面這個函式用來層次遍歷一棵二叉樹,從而從上到下,從左到右列印樹

//為了完成層次遍歷,用乙個佇列來儲存節點

//如果當前節點有左右節點,則把左右節點分別放入佇列,左節點有兒子,則將其兒子按照從左到右的順序壓入佇列

//直到隊列為空,則列印完畢

//這裡借助乙個向量依次存放數值,該函式也可以無返回值,每次只要把數字列印出來也可以

vectorprintfromtoptobottom(treenode* root)

return printnode;

}

二叉樹重構

問題描述 根據前序遍歷結果和中序遍歷結果,重構二叉樹。1 前序遍歷結果的特點 假設當前的遍歷結果是完整的樹節點集合。那麼第乙個節點就是該樹的根節點,並且其後面的節點集合中,前半部分是其左子樹的節點集合,後半部分是其右子樹的節點集合。2 中序遍歷結果的特點 如果當前節點是當前樹的根節點,那麼該節點左邊...

重構二叉樹

重構二叉樹的思路主要是首先在前序 後序 序列中找到根結點,然後在中序序列中找到根結點所在的位置,該結點將整個序列分成兩個部分,前一部分為根結點的左子樹元素,後一部分為根結點的右子樹元素。再遞迴的生成左子樹和右子樹即可。1.通過前序,中序序列重構二叉樹 treenode buildtree vecto...

重構二叉樹

題目描述 來自 劍指offer 輸入某二樹的前序遍歷和中序遍歷的結果,請重構該二叉樹。假設前序遍歷和中序遍歷的結果中不含重複數字。例如前序遍歷,中序遍歷 請重構二叉樹。思路 在前序遍歷中,第乙個元素是根元素即 1 是 根元素,而在在中序遍歷中 跟元素在中間,根元素之前的元素在左子樹而右邊的元素在右子...