树的实现(树的创建及遍历)

节点Node:

package TreeExercise;

public class TreeNode<T> {
    public T data;
    public TreeNode<T> left;
    public TreeNode<T> right;

    public TreeNode(T t) {
        data = t;
        left = null;
        right = null;
    }
}

树的基本方法:

package TreeExercise;

import java.util.Scanner;

public class MyTree<T extends Comparable> {

    //根节点
    public TreeNode<T> root;

    public MyTree() {
        root = new TreeNode<T>(null);
    }

    //创建查找二叉树
    public void buildTree(TreeNode<T> node, T data) {
        if (root == null) {
            root = new TreeNode<T>(data);
        } else {
            if (data.compareTo(node.data) < 0) {
                if (node.left == null) {
                    node.left = new TreeNode<T>(data);
                } else {
                    buildTree(node, data);
                }
            } else {
                if (node.right == null) {
                    node.right = new TreeNode<T>(data);
                } else {
                    buildTree(node, data);
                }
            }
        }
    }

    public void createTree() {
        Scanner sanner = new Scanner(System.in);
        root = createTreeNode(root, sanner);
    }

    //前序遍历生成二叉树
    private TreeNode<T> createTreeNode(TreeNode<T> node, Scanner scanner) {
        T data = (T) scanner.nextLine();
        if ("/".equals(data)) {
            return null;
        } else {
            node = new TreeNode<T>(data);
            node.left = createTreeNode(node.left, scanner);
            node.right = createTreeNode(node.right, scanner);
        }
        return node;
    }


    //region 递归遍历二叉树

    //中序遍历
    public void orderTraverse() {
//        System.out.println("中序遍历");
        System.out.println("orderTraverse");
        orderTraverse(root);
        System.out.println();
    }

    private void orderTraverse(TreeNode<T> node) {
        if (node == null) return;

        orderTraverse(node.left);
        System.out.println((T) node.data);
        orderTraverse(node.right);
    }

    //前序遍历
    public void preOrderTraverse() {
//        System.out.println("前序遍历");
        System.out.println("orderTraverse");
        preOrderTraverse(root);
        System.out.println();
    }

    private void preOrderTraverse(TreeNode<T> node) {
        if (node == null) return;

        System.out.println(node.data);
        orderTraverse(node.left);
        orderTraverse(node.right);
    }

    //后序遍历
    public void postOrderTraverse() {
//        System.out.println("后序遍历");
        System.out.println("postOrderTraverse");
        postOrderTraverse(root);
        System.out.println();
    }

    private void postOrderTraverse(TreeNode<T> node) {
        if (node == null) return;

        orderTraverse(node.left);
        orderTraverse(node.right);
        System.out.println(node.data);
    }

    //endregion


}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2-3-4 Tree(2-3-4树) 二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,...
    六尺帐篷阅读 84,678评论 20 140
  • 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary...
    kanehe阅读 1,392评论 0 8
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,475评论 1 31
  • 儿时/歌词 铁道旁赤脚追晚霞 玻璃珠铁盒英雄卡 玩皮筋迷藏石桥下 姥姥又纳鞋坐院坝 铁门前篮框银...
    长江客阅读 23,093评论 0 1
  • 红日出东海, 染尽半边天。 波涛惊起伏, 远方山静安! 2017.9.16 中午拙文
    白丰阁阅读 215评论 2 6