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

(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;
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值