07 構建二叉樹

2021-10-02 21:19:35 字數 1515 閱讀 5595

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

例如,給出

前序遍歷 preorder = [3,9,20,15,7]

中序遍歷 inorder = [9,3,15,20,7]

返回如下的二叉樹:

3/ \

9 20

/ \

15 7

限制:

0 <= 節點個數 <= 5000

解法:採用遞迴的形式,對從中序遍歷中找父節點,然後根據父節點在前序遍歷中找到左子樹和右子樹的結點。

遇到的問題:在建立結點的時候對結構體指標的初始化問題沒有弄明白(宣告乙個結構體指標記得初始化,一定要初始化,不初始化會出事

在獲取父節點在中序遍歷中的位置後,不能直接用來指定先序遍歷中結點的位置,要借助length來計算。

treenode* root = new treenode(rootvalue);

root->value = 3;

不能在沒有初始換的情況下使用(錯誤):

treenode* root;

root->value = 3;

solution:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

int prestart = 0,preend = preorder.size()-1,instart = 0,inend = inorder.size() - 1;

return constructcore(preorder,prestart,preend,inorder,instart,inend);

}treenode* constructcore(vector& preorder, int prestart, int preend, vector& inorder, int instart, int inend);

int leftlength=0, rightlength=0; //左右子樹的長度

leftlength = rootinnode -instart;

rightlength = inend - rootinnode;

if(leftlength > 0) //構造左子樹

root->left = constructcore(preorder,prestart+1,prestart+leftlength,inorder,instart,rootinnode-1);

if(rightlength > 0)

return root;

}};

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

構建二叉樹

前序遍歷構建二叉樹是根據根節點 左節點 右節點的方式輸入資料,針對乙個節點來說,首先輸入的是根節點,根節點之後的數值應該是其左子節點,之後是右節點,如果是遞迴,則首先是一直設定左節點,之後再依次設定右節點。之前在看二叉樹過程中,見過最多的是輸入個位數字構建二叉樹,今天看到乙個可以輸入多個數字的輸入方...

二叉樹構建(一)

說明 1.根據先序遍歷和中序遍歷或者後序遍歷和中序遍歷可以構建一棵二叉樹 2.構建以後序遍歷和中序遍歷為例,結點資料域以整形為例。定義二叉樹類 核心是constractpostcore函式。class binarytree binarytreenode int value,binarytreenod...