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 ...