二叉树操作

作者: Jimmy5Zhang | 来源:发表于2018-03-18 22:44 被阅读99次

1、定义二叉树

class TreeNode<T> {
        public int index;
        public T data;
        public TreeNode<T> leftNode;
        public TreeNode<T> rightNode;
        public TreeNode(int index, T data) {
            this.index = index;
            this.data = data;
        }
    }

2、创建二叉树

    private TreeNode<String>  root = null;
    
    public BinaryTree(){
        root = new TreeNode<String>(1, "A");
    }
    
    /**
     * 构建二叉树
     *         A
     *     B       C
     * D      E        F
     */
    private void createBinaryTree() {
        TreeNode<String> nodeB = new TreeNode<String>(2, "B");
        TreeNode<String> nodeC = new TreeNode<String>(3, "C");
        TreeNode<String> nodeD = new TreeNode<String>(4, "D");
        TreeNode<String> nodeE = new TreeNode<String>(5, "E");
        TreeNode<String> nodeF = new TreeNode<String>(6, "F");
        root.leftNode = nodeB;
        root.rightNode = nodeC;
        nodeB.leftNode = nodeD;
        nodeB.rightNode = nodeE;
        nodeC.leftNode = nodeF;
    }

3、计算二叉树的深度

    private int getHeight() {
        return getHeight(root);
    }
    
    private int getHeight(TreeNode<String> node) {
        if(node == null) {
            return 0;
        }else {
            int leftHeight = getHeight(node.leftNode);
            int rightHeight = getHeight(node.rightNode);
            return leftHeight > rightHeight ? (leftHeight + 1):(rightHeight + 1);
        }
    }

4、计算二叉树的节点

    private int getSize() {
        return getSize(root);
    }
    
    private int getSize(TreeNode<String> node) {
        if(node == null) {
            return 0;
        } else {
            int rightSize = getSize(node.rightNode);
            int leftSize = getSize(node.leftNode);
            return rightSize+leftSize+1;
        }
    }

5、前序遍历

   private void preOrder(TreeNode<String> node) {
        if(node == null) {
            return;
        }else {
            System.out.println("preorder node : " + node.data);
            preOrder(node.leftNode);
            preOrder(node.rightNode);
        }
    }

6、中序遍历

    private void midOrder(TreeNode<String> node) {
        if(node == null) {
            return;
        }else {
            midOrder(node.leftNode);
            System.out.println("midOrder node : " + node.data);
            midOrder(node.rightNode);
        }
    }

7、后序遍历

    private void postOrder(TreeNode<String> node) {
        if(node == null) {
            return;
        }else {
            postOrder(node.leftNode);
            postOrder(node.rightNode);
            System.out.println("postOrder node : " + node.data);
        }
    }

8、采用栈实现后序遍历

    private void noOrder(TreeNode<String> node) {
        if(node == null) {
            return;
        }else {
            Stack<TreeNode<String>> stack = new Stack<TreeNode<String>>();
            stack.push(node);
            while(!stack.isEmpty()) {
                TreeNode<String> n = stack.pop();
                System.out.println("postOrder node : " + n.data);
                TreeNode<String> leftNode = n.leftNode;
                if(leftNode != null) {
                    noOrder(leftNode);
                }
                TreeNode<String> rightNode = n.rightNode;
                if(rightNode != null) {
                    noOrder(rightNode);
                }
            }
            
        }
    }

9、测试

   public static void main(String[] args) {
        BinaryTree binaryTree = new BinaryTree();
        binaryTree.createBinaryTree();
        int height = binaryTree.getHeight();
        System.out.println("height:"+height);
        int size = binaryTree.getSize();
        System.out.println("size:"+size);
        System.out.println("--------preOrder--------");
        binaryTree.preOrder(binaryTree.root);
        System.out.println("--------midOrder--------");
        binaryTree.midOrder(binaryTree.root);
        System.out.println("--------postOrder--------");
        binaryTree.postOrder(binaryTree.root);
        System.out.println("--------noOrder--------");
        binaryTree.noOrder(binaryTree.root);
    }

相关文章

  • 68_二叉树的比较与相加

    关键词:二叉树的克隆操作、二叉树比较操作、二叉树的相加操作 0. 二叉树的克隆操作 SharedPointer< ...

  • 二叉树链式存储

    一、二叉树构造 二、二叉树基本操作 1、打印数据 2、构造空二叉树T 销毁二叉树初始条件: 二叉树T存在。操作结果...

  • 平衡二叉树的基本操作

    平衡二叉树定义及操作原理 C++简单实现 涉及练习题目:平衡二叉树的基本操作

  • 二叉树与图

    二叉树深度搜索 1. 路径总和 II 前序操作和后序操作结合: 2.二叉树的最近公共祖先 3. 二叉树展开为链表...

  • 二叉树的镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • 二叉树的镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • Day18 剑指offer:二叉树镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • 二叉树的镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • 二叉树的镜像

    题目: 操作给定的二叉树,将其变换为源二叉树的镜像。

  • 二叉树

    一些关于二叉树的简单操作 创建节点 简单操作

网友评论

    本文标题:二叉树操作

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