二叉搜索树的遍历序列之间转化

1.二叉搜索树的后序序列转为前序序列

public void PostToPre(int [] nums, int start, int end) {
		if(start>=end)
			return ;
		int record = nums[end];  //最后一个为二叉搜索树的根节点
		//移动数组元素
		for(int i=end; i>start;i--) {  //移动根节点的位置,使其变为前序序列
			nums[i] = nums[i-1];
		}
		nums[start] = record;           
		int i = start+1;
		for(;i<=end;i++) {             //根据根节点的大小,确定左子树序列和右子树序列的范围
			if(nums[i]>nums[start]) {
				break;
			}
		}
		PostToPre(nums,start+1,i-1);    //递归处理左右子树
		PostToPre(nums,i,end);
	}

2.二叉搜索树前序转后序

public static void PreToPost(int[] nums, int start, int end) {
		if (start >= end)
			return;
		int record = nums[start]; // 第一个为二叉搜索树的根节点
		// 移动数组元素使其变为前序序列
		for (int i = start + 1; i <= end; i++) {
			nums[i - 1] = nums[i];
		}
		nums[end] = record;
		// 根据根节点的大小确定左右子树的范围
		int i = start;
		for (; i <= end; i++) {
			if (nums[i] > record) {
				break;
			}
		}
		PreToPost(nums, start, i - 1);
		PreToPost(nums, i, end - 1);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值