由前序和中序建立二叉樹

2021-10-25 16:53:17 字數 2700 閱讀 6211

c語言版本

1. 找出根節點(先序的第乙個節點是根節點)

2. 分出左右子樹(再根據中序分出左右子樹:在中序中找出與根節點相同的節點,該位置兩邊分別是左右子樹)

3. 遞迴

4. 返回根節點

版本1:低效,不借助其他工具類
/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

//1. 根節點

treenode root=

newtreenode

(preorder[0]

);if(len==1)

//2.找根節點在中序中的位置

int flag=0;

for(

int i=

0;i/左子樹///

//左子樹不為空

//左子樹中序

int leftinorder=

newint

[flag]

;//左子樹前序

int leftpreorder=

newint

[flag]

;//左子樹前序和中序

for(

int i=

0;i)//遞迴左子樹

root.left=

buildtree

(leftpreorder,leftinorder)

;///右子樹///

//右子樹長度

int len2=len-flag-1;

//右子樹沒有可直接返回

if(len2==0)

//右子樹中序

int rightinorder=

newint

[len2]

;//右子樹前序

int rightpreorder=

newint

[len2]

;//右子樹的前序和中序

int j=0;

for(

int i=flag+

1;i)//遞迴右子樹

root.right=

buildtree

(rightpreorder,rightinorder)

;return root;

}}

版本2借助arrays.copyofrange(),**簡潔
/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

} treenode root =

newtreenode

(rootval)

; root.left =

buildtree

(arrays.

copyofrange

(preorder,1,

1+ rootindex)

, arrays.

copyofrange

(inorder,

0, rootindex));

root.right =

buildtree

(arrays.

copyofrange

(preorder,

1+ rootindex, n)

, arrays.

copyofrange

(inorder, rootindex +

1, n));

return root;

}}

/**

* definition for a binary tree node.

* struct treenode ;

*/struct treenode*

buildtree

(int

* preorder,

int preordersize,

int* inorder,

int inordersize)

//1.找根節點

struct treenode *root=

(struct treenode*

)malloc

(sizeof

(struct treenode));

root->val=preorder[0]

;//根據根節點在中序中的位置,區分左右子樹

int flag=0;

//根節點在中序中的位置

int i=0;

for(i;i//右子樹長度

int rightlen=preordersize-

1-flag;

//左子樹遞迴

root->left=

buildtree

(&preorder[1]

,flag,

&inorder[0]

,flag)

;//右子樹遞迴

root->right=

buildtree

(&preorder[flag+1]

,rightlen,

&inorder[flag+1]

,rightlen)

;return root;

}

由前序和中序建立二叉樹的演算法

網上根據前序和中序建立二叉樹的 是這樣的 void create tree tree t,int pre s,int pre e,int in s,int in e if root index in s 存在左子樹else t lchild null if root index in e 存在右子樹...

由前序 中序,輸出二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。treenode build vectorpre,vectorin 思路 遞迴邊界 當前序為空時,返回空,當前序只有乙個元素時,顯然...

二叉樹 由前序遍歷和中序遍歷重建二叉樹

由前序遍歷和中序遍歷重建二叉樹 前序序列 1 2 3 4 5 6 中序序列 3 2 4 1 6 5 思路 前序遍歷第乙個是根節點。中序遍歷根節點左側為左子樹,根右側為右子樹。那麼先構造根節點,根節點左側都為左子樹,根右側都為右子樹。然後對左右子樹遞迴式的構造即可。封裝 binarytreenode ...