关于二叉树本人最近的学习记录


前言

树是数据结构当中比较重要的,最近学习了关于二叉树的一些知识,特此记录一下知识点,遗忘的时候可以翻翻


提示:以下是本篇文章正文内容,下面案例可供参考

一、二叉树是什么?

树是一种特殊的图,是一种有向无环,二叉树是树中比较特殊的一种,每个节点的度最大只能等于二

二、如何遍历树

树的遍历分为三种,前序遍历,中序遍历,后序遍历
前序遍历:根节点在前,左右结点在后
中序遍历:左节点在前,根节点在中间,右结点在最后
后序遍历:左节点在前,右结点在中间,根节点在后面
下面是几种遍历方式的代码实现,这里我们使用递归来实现

1.前序遍历

//这里不对树的创建进行讲解,传入的参数为树的根节点
public void show(Tree root){
if(root==null){
		return ;
	}
	System.out.println(root.val);
	show(root.left);
	show(root.right);
}

2.中序遍历

代码如下(示例):

public void show(Tree root){
if(root==null){
		return ;
	}

	show(root.left);
		System.out.println(root.val);
	show(root.right);
}

3.后序遍历

代码如下(示例):

public void show(Tree root){
if(root==null){
		return ;
	}

	show(root.left);		
	show(root.right);
	System.out.println(root.val);
}

总结

我们可以发现这几种方式只是更改了下显示节点的位置,如果要将其存入结果集合当中也是一样的道理,只需要简单的更改下代码了,这几种遍历运用的是图算法中的DFS搜索法,有兴趣的可以去了解下,下面来讲解下关于树的层级遍历

树的BFS遍历的演示

在学习树的层级遍历之前,应该先去大致了解下队列的相关知识,在这里我提示一下,dfs遍历中隐式的使用了栈,bfs中使用了队列,队列的特性就是先进先出,我们要利用他这个特点

代码演示

public void helper(Tree node){
if(root==null){
return ;
}
//先创建1队列,用来完成层级遍历,链表实现了队列接口,使用链表来创建队列
Queue<Tree> que=new LinkedList<>();
//将根结点放入队列当中
que.add(node);
while(!que.isEmpty()){
//获取到队列的长度,以便后期遍历队列
int size=que.size();
//创建动态数组,用来存放结果
ArrayList<Integer> temp=new ArrayList<>();
for(int i=0;i<size;i++){
//设定变量来存放从队列中出来的元素
	Tree current=que.poll();
	//将获取到的元素放入数组中
	temp.add(current.val);
	//判断取出的元素,左子树是否为空
	if(current.left!=null){
	//将其添加进入队列
	que.add(current.left);
	}
	//判断右子树是否为空
	if(curren.right!=null){
	que.add(current.right)
	}
	}
}

}

如何通过遍历顺序来构架一颗二叉树

我们学习过二叉树的两种遍历后,现在有个问题来了,怎么样通过几种遍历顺序来还原一颗二叉树

  1. 根据前序和中序可以还原出
  2. 根据中序和后续可以还原出
    有兴趣的同学可以取力扣中学习下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值