class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
//重建二叉树
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre==null||in==null||pre.length==0||in.length==0)
{
return null;
}
TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
return root;
}
//采用递归的思想重新构建二叉树
private TreeNode reConstructBinaryTree(int[]pre,int preStart,int PreEnd,int[]in,int inStart,int inEnd)
{
if(preStart>PreEnd||inStart>inStart)
return null;
TreeNode root=new TreeNode(pre[preStart]); //第一个为根节点
for(int i=inStart;i<=inEnd;i++)
{
if(in[i]==pre[preStart]){
root.left=reConstructBinaryTree(pre,preStart+1,preStart+i-inStart,in,inStart,i-1);
root.right=reConstructBinaryTree(pre,i-inStart+preStart+1,PreEnd,in,i+1,inEnd);
break;
}
}
return root;
}
//二叉树的后序遍历
public void posTree(TreeNode root)
{
if(root!=null)
{
posTree(root.left);
posTree(root.right);
visit(root);
}
}
public void visit(TreeNode node)
{
System.out.print(node.val);
}
public static void main(String[]args){
//System.out.println("Hello");
int[]pre={1,2,4,7,3,5,6,8};
int[]in={4,7,2,1,5,3,8,6};
Solution s=new Solution();
s.posTree(s.reConstructBinaryTree(pre,in));
}
}
重建二叉树
最新推荐文章于 2022-07-12 21:24:24 发布
本文介绍了一种通过先序和中序遍历序列重建二叉树的方法,并提供了完整的Java实现代码。该算法利用递归思想,通过匹配序列元素确定根节点,进而划分左右子树,最终构建完整的二叉树结构。此外,还展示了如何使用后序遍历验证构建结果。
摘要由CSDN通过智能技术生成