二叉树的拷贝构造方法与先序中序构造二叉树

关于二叉树的体会与理解

1.二叉树的拷贝构造方法

我一开始将二叉树的拷贝构造方法的主体写在了BinaryTree中,但是具体的实现还是调用了树节点类中的方法
感觉不是特别好,但是没想怎么在类内实现

//BinaryTree
public BinaryTree(BinaryTree<T> p) {
		this.root=new BinaryNode<T>(p.root.data);//拷贝根节点数据
		this.root.BinaryTreecopy(p.root);//传入节点	
	}
//BinaryNode
void BinaryTreecopy(BinaryNode<T> p) {
		if(p!=null) {     
			if(p.left!=null) {  //建立左孩子
				BinaryNode<T> q=new BinaryNode<T>(p.left.data);
				this.left=q;
				q.BinaryTreecopy(p.left);   //递归调用
			}
			else this.left=null;    //否则给空
			if(p.right!=null) {     //右孩子
				BinaryNode<T> q=new BinaryNode<T>(p.right.data);
				this.right=q;
				q.BinaryTreecopy(p.right);     //递归调用
			}
			else this.right=null;
		}
	  }

二叉树的先序中序构造二叉树

既然有两种序列,那么一定要有先根序列的子树的起点和终点,同理中根序列也要有两个参数来表明,那么在进行构造的时候就一定要有先序数组,先序的起点终点,中序数组,中序的起点终点,六个参数。少一个都不能唯一确定一棵二叉树。先序中序构造二叉树的详细流程
下面是实现的代码

public BinaryTree(T prelist[], T inlist[]) {
		int start=0,end=prelist.length-1;
		this.root=create(prelist,inlist,start,end,start,end);
		
	}
public BinaryNode<T>create(T[] prelist,T[]inlist,int prestart,int preend,int instart, int inend){
	if(prestart>preend||instart>inend)
		return null;
	BinaryNode<T>p=new BinaryNode<T>(prelist[prestart]);		
	for(int n=instart;n<=inend;n++)
		if(prelist[prestart].equals(inlist[n])){		
			p.left=create(prelist,inlist,prestart+1,prestart+n,instart,n-1);
			p.right=create(prelist,inlist,n+prestart+1-instart,preend,n+1,inend);
		}	
	return p;  
} 

构造方法的重点是四个位置的确定。
想得到不一定写的出,写的出不一定跑得起来,跑得起来不一定有正确结果。。
多单步调试吧,多用笔,画草图,总比死定屏幕好(手动滑稽)

双笙的歌一直炒鸡好听https://music.163.com/song?id=534540498&userid=431967872
摸鱼
在这里插入图片描述
写个小游戏,就是一直bug。。。没调。。。界面也很丑,好的,下期再见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值