前言
树是数据结构当中比较重要的,最近学习了关于二叉树的一些知识,特此记录一下知识点,遗忘的时候可以翻翻
提示:以下是本篇文章正文内容,下面案例可供参考
一、二叉树是什么?
树是一种特殊的图,是一种有向无环,二叉树是树中比较特殊的一种,每个节点的度最大只能等于二
二、如何遍历树
树的遍历分为三种,前序遍历,中序遍历,后序遍历
前序遍历:根节点在前,左右结点在后
中序遍历:左节点在前,根节点在中间,右结点在最后
后序遍历:左节点在前,右结点在中间,根节点在后面
下面是几种遍历方式的代码实现,这里我们使用递归来实现
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)
}
}
}
}
如何通过遍历顺序来构架一颗二叉树
我们学习过二叉树的两种遍历后,现在有个问题来了,怎么样通过几种遍历顺序来还原一颗二叉树
- 根据前序和中序可以还原出
- 根据中序和后续可以还原出
有兴趣的同学可以取力扣中学习下