二叉树 遍历方式

二叉树的遍历方式

包含前序遍历、中序遍历、后续遍历,主要区别于遍历的顺序

1.前序遍历 = 根左右,即先遍历根节点,再遍历左子树,最后遍历右子树;前序遍历上图所示的结果为ABDECF
2.中序遍历 = 左根右,即先遍历左子树,再遍历根节点,最后遍历右子树;中序遍历上图所示的结果为DBEAFC
3.后序遍历 = 左右根,即先遍历左子树,再遍历右子树,最后遍历根节点;后序遍历上图所示的结果为DEBFCA

Java代码示例

Node 结构
@Data
public class Node {

    String data;
    Node parent;
    Node left;
    Node right;

    public Node(String data) {
        this.data = data;
    }
}
构建示例图中的二叉树结构 返回根节点A
public static Node buildRoot() {
    Node a = new Node("A");
    Node b = new Node("B");
    Node c = new Node("C");
    Node d = new Node("D");
    Node e = new Node("E");
    Node f = new Node("F");
    a.setLeft(b);
    a.setRight(c);
    b.setParent(a);
    b.setLeft(d);
    b.setRight(e);
    c.setParent(a);
    c.setLeft(f);
    d.setParent(b);
    e.setParent(b);
    f.setParent(c);
    return a;
}
前序遍历
public static void front(Node root) {
    if(root != null){
        System.out.println(root.getData());
        front(root.getLeft());
        front(root.getRight());
    }
}
中序遍历
public static void middle(Node root) {
    if (root != null) {
        middle(root.getLeft());
        System.out.println(root.getData());
        middle(root.getRight());
    }
}
后序遍历
public static void backend(Node root) {
    if (root != null) {
        backend(root.getLeft());
        backend(root.getRight());
        System.out.println(root.getData());
    }
}
执行测试
public static void main(String[] args) {

    System.out.print("前序:");
    front(buildRoot());
    System.out.println("");

    System.out.print("中序:");
    middle(buildRoot());
    System.out.println("");

    System.out.print("后序:");
    backend(buildRoot());
}
输出结果

image.png

参考资料:
https://baike.baidu.com/item/...
https://baike.baidu.com/item/...
https://baike.baidu.com/item/...

27 声望
5 粉丝
0 条评论
推荐阅读
Could not initialize class net.sf.cglib.beans.BeanMap$Generator
项目使用springboot整合easyexcel文件导出时报错Could not initialize class net.sf.cglib.beans.BeanMap$Generator

老污的猫阅读 123

利用Jackson序列化实现数据脱敏
在项目中有些敏感信息不能直接展示,比如客户手机号、身份证、车牌号等信息,展示时均需要进行数据脱敏,防止泄露客户隐私。脱敏即是对数据的部分信息用脱敏符号(*)处理。

京东云开发者1阅读 387

封面图
树形结构效率对比
二叉查找树 (Binary Search Tree)概念二叉查找树又称二叉搜索树,二叉排序树,特点如下:左子树上所有结点值均小于根结点右子树上所有结点值均大于根结点结点的左右子树本身又是一颗二叉查找树二叉查找树中序遍历...

老污的猫阅读 2.5k

架构师日记-从数据库发展历程到数据结构设计探析 | 京东云技术团队
起初,数据的管理方式是文件系统,数据存储在文件中,数据管理和维护都由程序员完成。后来发展出树形结构和网状结构的数据库,但都存在着难以扩展和维护的问题。直到七十年代,关系数据库理论的提出,以表格形式...

京东云开发者1阅读 232

封面图
【牛客小白月赛70】A-F题解【小d和超级泡泡堂】【小d和孤独的区间】【小d的博弈】【小d和送外卖】
🎈 作者:Eriktse🎈 简介:19岁,211计算机在读,现役ACM银牌选手🏆力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)🚀🎈 阅读原文获得更好阅读体验:[链接]

Eriktse阅读 531

双向带头循环链表
优点:a、支持随机访问,很多算法都需要随机访问(快排、二分)b、cpu高速缓存命中率更高(cpu读数据时,先去找缓存,如果没有就去内存把数据加载到缓存。在加载时它不是只加载一个数据,而是附近一片数据,所以...

月亮给蒙娜丽莎阅读 452

栈和队列
栈和队列一、关于模拟栈使用何种模型1.顺序表:尾插尾删很快,缓存利用率高,但是要扩容2.单链表:使用链表头作为栈顶来插入删除数据也很快3.带头双向循环链表:也可以,时间也是O(1)二、栈的模拟实现 {代码...} ...

月亮给蒙娜丽莎阅读 429

27 声望
5 粉丝
宣传栏