这个要通过递归来做,
如:给一个前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
解题思路:
1.先通过前序序列确认根节点(即数组的第一个),再通过中序序列确认左右子树
2.分别对左右子树来进行递归,直到左右子树变为叶子节点为止
代码如下:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public
class
Solution {
public
TreeNode reConstructBinaryTree(
int
[] pre,
int
[] in) {
TreeNode tree=
new
TreeNode(pre[
0
]);
if
(pre.length>
1
){
int
count=
0
;
for
(
int
i=
0
;i<in.length;i++)
{
if
(in[i]==pre[
0
])
break
;
count++;
}
if
(count>
0
){
int
pre1[]=
new
int
[count];
int
in1[]=
new
int
[count];
for
(
int
i=
1
;i<=count;i++)
{
pre1[i-
1
]=pre[i];
}
for
(
int
i=
0
;i<count;i++)
{
in1[i]=in[i];
}
tree.left=reConstructBinaryTree(pre1,in1);
}
if
(pre.length-count-
1
>
0
){
int
pre2[]=
new
int
[pre.length-count-
1
];
int
in2[]=
new
int
[pre.length-count-
1
];
for
(
int
i=count+
1
;i<pre.length;i++)
{
pre2[i-count-
1
]=pre[i];
in2[i-count-
1
]=in[i];
}
tree.right=reConstructBinaryTree(pre2,in2);
}
}
return
tree;
}
}
版权声明:本文为YangOuBaDreams原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。