Java抑制中序遍历和先序遍历 求二叉树

来源:互联网 发布:淘宝发布宝贝最佳时间 编辑:程序博客网 时间:2024/06/07 22:10
(1)确定树的根节点。树根是当前树中所有元素在先序遍历中最先出现的元素,即先序遍历的第一个结点就是二叉树的跟 
(2)求解树的子树。找到根在中序遍历的位置,位置左边就是二叉树的左孩子,位置右边是二叉树的右孩子,如果跟结点左边或右边为空,那么该方向子树为空;如果根节点左边和右边都为空,那么根节点已经为叶子节点。 

(3)对二叉树的左、右孩子分别进行步骤(1)(2),直到求出二叉树的结构为止。

public class Main {public static void main(String[] args) {int[] preorder = {1,2,4,7,3,5,6,8};int[] inorder = {4,7,2,1,5,3,8,6};//System.out.println(preorder[0]);TreeNode root = Solution.reConstructBinaryTree(inorder, 0,7, preorder, 0, 7);Solution.printTreePre(root);}}class Solution {static int i = 0;public static void printTreePre(TreeNode root){//遍历if(root==null){return;}System.out.println(root.val);//先序遍历//left//if(root.left !=null){//System.out.println("left"+root.left.val);//}printTreePre(root.left);
System.out.println(root.val);//中序遍历

//right//if(root.right !=null){//System.out.println("right"+root.right.val);//}printTreePre(root.right);
System.out.println(root.val);//后序遍历
}
//重构树
public static TreeNode reConstructBinaryTree(int[] in,int inStart,int inEnd, int[] pre, int preStart,int preEnd) {if(inStart > inEnd || preStart > preEnd){return null;}TreeNode root = new TreeNode(pre[preStart]);int indexDivider = 0;for(;indexDivider<=inEnd;indexDivider++){if(in[indexDivider]==root.val){break;}}//int offSet = TreeNode left = reConstructBinaryTree(in, inStart, indexDivider-1, pre, preStart+1, preStart+indexDivider-inStart);TreeNode right = reConstructBinaryTree(in, indexDivider+1, inEnd, pre, preStart+indexDivider-inStart+1, preEnd);root.left = left;root.right = right;return root;}

}


原创粉丝点击