二叉树遍历(递归)

简介:
复制代码
 // 测试二叉树遍历,递归算法
    public class TestBinaryTree {
    public static void main(String[] args) {
    Node<String> g = new Node<String>("G", null, null);
    Node<String> e = new Node<String>("E", null, null);
    Node<String> f = new Node<String>("F", null, null);
    Node<String> d = new Node<String>("D", null, g);
    Node<String> b = new Node<String>("B", d, e);
    Node<String> c = new Node<String>("C", null, f);
    Node<String> a = new Node<String>("A", b, c);
    System.out.println("生成的二叉树:");
    System.out.println("            A");
    System.out.println("            |     ");
    System.out.println("       |---------|");
    System.out.println("       B         C");
    System.out.println("       |         |");
    System.out.println("  |---------|     -----|");
    System.out.println("  D         E          F");
    System.out.println("  |");
    System.out.println("   ----|");
    System.out.println("       G");
    System.out.println("二叉树深度:" + BinaryTree.getDepth(a));
    System.out.print("前序遍历:");
    BinaryTree.priorderTraversal(a);
    System.out.println();
    System.out.print("中序遍历:");
    BinaryTree.inorderTraversal(a);
    System.out.println();
    System.out.print("后序遍历:");
    BinaryTree.postorderTraversal(a);
    System.out.println();
    }
    }
    // 二叉树
    class BinaryTree {
    // 前序遍历
    static <T> void priorderTraversal(Node<T> node) {
    if (node != null) {
    visitNode(node);
    priorderTraversal(node.getLeftChild());
    priorderTraversal(node.getRightChild());
    }
    }
    // 中序遍历
    static <T> void inorderTraversal(Node<T> node) {
    if (node != null) {
    inorderTraversal(node.getLeftChild());
    visitNode(node);
    inorderTraversal(node.getRightChild());
    }
    }
    // 后序遍历
    static <T> void postorderTraversal(Node<T> node) {
    if (node != null) {
    postorderTraversal(node.getLeftChild());
    postorderTraversal(node.getRightChild());
    visitNode(node);
    }
    }
    // 二叉树深度
    static <T> int getDepth(Node<T> node) {
    if (node == null) {
    return 0;
    }
    int leftDepth = 0;
    int rightDepth = 0;
    leftDepth = getDepth(node.getLeftChild());
    rightDepth = getDepth(node.getRightChild());
    return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
    }
    // 访问节点
    static <T> void visitNode(Node<T> node) {
    System.out.print(node.getKey() + " ");
    }
    }
    // 节点
    class Node<T> {
    private T key;
    private Node<T> leftChild;
    private Node<T> rightChild;
    public Node() {
    }
    public Node(T key, Node<T> leftChild, Node<T> rightChild) {
    super();  www.2cto.com
    this.key = key;
    this.leftChild = leftChild;
    this.rightChild = rightChild;
    }
    public T getKey() {
    return key;
    }
    public void setKey(T key) {
    this.key = key;
    }
    public Node<T> getLeftChild() {
    return leftChild;
    }
    public void setLeftChild(Node<T> leftChild) {
    this.leftChild = leftChild;
    }
    public Node<T> getRightChild() {
    return rightChild;
    }
    public void setRightChild(Node<T> rightChild) {
    this.rightChild = rightChild;
    }
    }
复制代码

 

    输出结果:
    生成的二叉树:
    A
    |
    |---------|
    B         C
    |         |
    |---------|     -----|
    D         E          F
    |
    ----|
    G
    二叉树深度:4
    前序遍历:A B D G E C F
    中序遍历:D G B E A C F
    后序遍历:G D E B F C A

作者:Orson 
出处:http://www.cnblogs.com/java-class/ 
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】 
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】 
如果,您对我的博客内容感兴趣,请继续关注我的后续博客,我是【Orson】 

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段 声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

转载:http://www.cnblogs.com/java-class/archive/2013/05/04/3059406.html

目录
相关文章
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
606 214
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
849 61
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1252 157
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
241 138
|
7天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
522 109