我是靠谱客的博主 拉长鱼,最近开发中收集的这篇文章主要介绍二叉树学习(三):二叉树遍历1、二叉树遍历原理2、前序遍历DLR3、 中序遍历LDR4、后序遍历LRD,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、二叉树遍历原理

二叉树的遍历是指从根结点出发,按照某种次序依次访问树中所有结点,使得每个结点被访问依次且仅被访问一次。
其中访问代表对该结点的数据的操作,这里我们可以认为就是直接打印该结点的数据。
二叉树遍历算法的基础是递归

2、前序遍历DLR

若二叉树为空,则空操作返回。否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。
先访问,再左子树,再右子树。
前序遍历

前序遍历算法

public void preOrder(Node<T> node){
    if(node==null){
        return;
    } else {
        system.out.println(node.data);
        preOrder(node.lChild);
        preOrder(node.rChild);
    }
}

遍历结果是:A B D G H C E I F
算法解析:
1、首先判断是否为空树,不为空(根节点不为空),则执行system.out.println(node.data);打印出A。
2、接下来在A结点上递归调用执行preOrder(node.lChild);访问根节点A的左孩子B,不为null,则system.out.println(node.data)打印显示字母B
3、在B结点上递归调用preOrder(node.lChild);访问结点D,D结点不为空,打印显示D
4、在D结点上递归调用preOrder(node.lChild);访问结点H,H不为空,输出打印H
4、在H结点上递归调用preOrder(node.lChild);H左子树为空,H结点上的preOrder(node.lChild);这行代码返回
5、执行H结点上的preOrder(node.rChild);,访问H结点的右结点K,K不为空,输出打印K
6、在K上递归调用preOrder(node.lChild);为空返归,
7、在K上递归调用preOrder(node.rChild);为空返回到H结点,
8、H结点的preOrder(node.rChild);这行代码返回了,则H结点的代码执行完毕,返回到D结点
9、D结点的preOrder(node.lChild);代码返回了,调用preOrder(node.rChild)遍历D结点的右子树,右子树为空,返回;
10、返回到B结点,B结点调用preOrder(node.rChild);访问B结点的右子树E,E不为空,输出打印E
11、在E结点上递归调用preOrder(node.lChild);preOrder(node.rChild);均为空,返回到B,
12、B结点代码执行完毕,返回到A结点,
13、A结点执行preOrder(node.rChild);访问A结点的右子树C,C不为空,输出打印C
14、在C结点递归调用preOrder(node.lChild);访问C的左子树F,F不为空输出打印F
15、在F上递归调用preOrder(node.lChild);访问F的左子树I,I不为空,输出打印I
16、在I结点上调用preOrder(node.lChild);preOrder(node.rChild);均为空,返回到结点F
17、结点F调用preOrder(node.rChild);访问F结点右子树,右子树为空,返回
18、F结点代码执行完毕,返回到C结点,C结点调用preOrder(node.rChild);访问C结点的右子树G,G不为空,输出打印G
19、在G结点上递归调用preOrder(node.lChild);访问G的左子树,左子树为空,返回
20、G结点调用preOrder(node.rChild);访问G结点的右子树J,J不为空,输出打印J
21、在J上调用preOrder(node.lChild);preOrder(node.rChild);均为空,返回
22、G代码执行完毕返回到C,
23、C代码执行完毕返回到A,
24、A代码执行完毕,整个遍历结束。
最终输出结果:
A B D G H C E I F

3、 中序遍历LDR

先左子树,再访问,再右子树。

中序遍历

public void preOrder(Node<T> node){
    if(node==null){
        return;
    } else {
        preOrder(node.lChild); //左子树
        system.out.println(node.data); //输出打印
        preOrder(node.rChild);  //右子树
    }
}

遍历算法跟前序遍历相似,其关键就是递归调用,在哪个结点上递归,返回到哪个结点。
遍历输出结果是:G D H B A E I C F

4、后序遍历LRD

先右子树,再左子树,再访问

后序遍历

public void preOrder(Node<T> node){
    if(node==null){
        return;
    } else {
        system.out.println(node.data); //输出打印
        preOrder(node.lChild); //左子树
        preOrder(node.rChild);  //右子树
    }
}

遍历算法同前序、中序。
遍历输出结果是: G H D B I E F C A

最后

以上就是拉长鱼为你收集整理的二叉树学习(三):二叉树遍历1、二叉树遍历原理2、前序遍历DLR3、 中序遍历LDR4、后序遍历LRD的全部内容,希望文章能够帮你解决二叉树学习(三):二叉树遍历1、二叉树遍历原理2、前序遍历DLR3、 中序遍历LDR4、后序遍历LRD所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部