java实现已知先序遍历和中序遍历,求后序遍历

本文介绍如何根据已知的先序和中序遍历,利用Java实现后序遍历。通过确定中序遍历,结合另一种遍历方式,可以构造出完整的二叉树,并输出后序遍历结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇写到了如何构建一棵树并打印出他的四种遍历,今天按着上一次的代码接着写已知先序遍历和中序遍历,求后序遍历。

只要确定了中序遍历,加上另外一种遍历,我们就可以构造出一棵树

//已知前序中序求后序遍历
		//先求出树的原型
		public Node initTree(int[] preOrder,int pstart,int pend,int[] inOrder,int instart,int inend){
			if(pstart > pend || instart > inend){
				return null;
			}
			int rootData = preOrder[pstart];
			Node head = new Node(rootData);
			//根据中序找到根节点所在位置(左边为左子树,右边为右子树)
			int rootIndex = findIndexInArray(inOrder,rootData,instart,inend);
			int offSet = rootIndex-instart-1;
			//构建左子树
			Node left = initTree(preOrder,pstart+1,pstart+offSet+1,inOrder,instart,instart+offSet);
			//构建右子树
			Node right = initTree(preOrder,pstart+offSet+2,pend,inOrder,rootIndex+1,inend);
			head.left = left;
			head.right = right;
			return head;
		}
        //中序根节点位置
		private int findIndexInArray(int[] inOrder, int rootData, int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值