美文网首页
创建二叉树并遍历

创建二叉树并遍历

作者: ruoshy | 来源:发表于2019-09-28 06:57 被阅读0次

一、创建节点类

节点类中存储着要保存的数据,以及他的左子树和右子树

public class TreeNode {
    private TreeNode leftNode;
    private TreeNode rightNode;
        // 存储类型自定义
    private Integer data;
 
    public TreeNode getLeftNode() {
        return leftNode;
    }

    public void setLeftNode(TreeNode leftNode) {
        this.leftNode = leftNode;
    }

    public TreeNode getRightNode() {
        return rightNode;
    }

    public void setRightNode(TreeNode rightNode) {
        this.rightNode = rightNode;
    }

    public Integer getData() {
        return data;
    }

    public void setData(Integer data) {
        this.data = data;
    }

}

二、创建二叉树

public class Tree {
    // 头结点
    private TreeNode treeNode;

    public Tree() {
        this.treeNode = new TreeNode();
    }

    /* 插入数据 */
    public void insert(Integer data) {
        insert(treeNode, data);
    }

    public void insert(TreeNode node, Integer data) {
        if (node.getData() == null) { // 节点数据为空则插入
            node.setData(data);
        } else if (node.getData() > data) { // 若要插入的数据小于当前节点,将数据存储到左子树
            // 若左子树为空创建左子树
            if (node.getLeftNode() == null) {
                // 由于节点中,子节点为null,并没有被分配内存地址
                // 当将子节点传递给方法,方法收到的是一个指向空地址的对象
                // 实例化对象后赋值,子节点将指向实例化的对象的内存地址
                // 而父节点中子节点仍然为null,所以先对子节点进行实例化再传递给方法
                node.setLeftNode(new TreeNode());
            }
            // 将左子树对象进行递归直到子节点中数据为空
            insert(node.getLeftNode(), data);
        } else {
            if (node.getRightNode() == null) {
                node.setRightNode(new TreeNode());
            }
            insert(node.getRightNode(), data);
        }
    }
    /**/

    /* 先序遍历 */
    public void before() {
        before(treeNode);
    }

    public void before(TreeNode node) {
        if (node != null) {
            // 根左右
            System.out.println(node.getData());
            before(node.getLeftNode());
            before(node.getRightNode());
        }
    }
    /**/

    /* 后续遍历 */
    public void after() {
        after(treeNode);
    }

    public void after(TreeNode node) {
        if (node != null) {
            // 左右根
            after(node.getLeftNode());
            after(node.getRightNode());
            System.out.println(node.getData());
        }
    }
    /**/

    /* 中序遍历 */
    public void middle() {
        middle(treeNode);
    }

    public void middle(TreeNode node) {
        if (node != null) {
            // 左根右
            middle(node.getLeftNode());
            System.out.println(node.getData());
            middle(node.getRightNode());
        }
    }
    /**/
}

三、测试

先序遍历

public class Test {

    public static void main(String[] args) {
        Tree tree = new Tree();
        tree.insert(3);
        tree.insert(5);
        tree.insert(1);
        tree.insert(2);
        tree.insert(0);
        tree.insert(4);
        tree.before();
    }

}
先序遍历

后序遍历

public class Test {

    public static void main(String[] args) {
        Tree tree = new Tree();
        tree.insert(3);
        tree.insert(5);
        tree.insert(1);
        tree.insert(2);
        tree.insert(0);
        tree.insert(4);
        tree.after();
    }

}
后序遍历

中序遍历

public class Test {

    public static void main(String[] args) {
        Tree tree = new Tree();
        tree.insert(3);
        tree.insert(5);
        tree.insert(1);
        tree.insert(2);
        tree.insert(0);
        tree.insert(4);
        tree.middle();
    }

}
中序遍历

相关文章

  • 记一次Tree的遍历

    统计利用先序遍历创建的二叉树的深度 利用先序递归遍历算法创建二叉树并计算该二叉树的深度。先序递归遍历建立二叉树的方...

  • 二叉树的递归遍历+非递归遍历,Swift实现

    定义二叉树模型 创建二叉树: 创建的二叉树如下: 这个二叉树的遍历分别为: 先序遍历: 124536 中序遍历:4...

  • 二叉树的基本操作

    一、基本内容 二叉树的创建(先顺遍历的方法) 二叉树的先序遍历 二叉树的中序遍历 二叉树的后序遍历 哈夫曼树的创建...

  • 数据结构之二叉树2

    二叉树的创建 二叉树的创建用到了辅助队列,通过辅助队列来创建二叉树; 二叉树的遍历 前(先)序遍历 1、递归实现 ...

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

  • 线索二叉树操作

    树节点 创建中序线索二叉树 遍历中序线索二叉树 创建前序线索二叉树 遍历前序线索二叉树 参考:https://bl...

  • 数据结构

    二叉树的创建与遍历

  • 二叉树

    结构体 创建二叉树 递归遍历 栈操作 非递归遍历 层次遍历 完整代码

  • 二叉树遍历

    总结一下二叉树的深度遍历(DFS)和广度遍历(BFS)首先, 创建二叉树的节点: 一、深度遍历 1.1 先序遍历(...

  • GO学习笔记(6) - 二叉树构建与遍历

    目录 二叉树介绍 广度优先遍历创建二叉树广度遍历 深度优先遍历先、中、后序遍历利用函数编程得到节点总数利用chan...

网友评论

      本文标题:创建二叉树并遍历

      本文链接:https://www.haomeiwen.com/subject/othnyctx.html