zoukankan      html  css  js  c++  java
  • 二叉树

    package com.m01.program.maven_1;
    
    import java.util.Stack;
    
    public class TestBinaryTree {
    
        public static void main(String[] args) {
            TreeNode node=getBinaryTree();
            node=destroy(node);
            System.out.println(node);
            Stack<TreeNode> s=new Stack();
            
        }
        //创建二叉树
        static TreeNode getBinaryTree(){
            TreeNode node1=new TreeNode("A");
            TreeNode node2=new TreeNode("B");
            TreeNode node3=new TreeNode("C");
            TreeNode node4=new TreeNode("BB1");
            TreeNode node5=new TreeNode("BB2");
            TreeNode node6=new TreeNode("CC1");
            TreeNode node7=new TreeNode("CC2");
            node1.setLeftNode(node2);
            node1.setRightNode(node3);
            node2.setLeftNode(node4);
            node2.setRightNode(node5);
            node3.setLeftNode(node6);
            node3.setRightNode(node7);
            return node1;
        }
        //输出节点
        static void out(TreeNode<?> node){
            System.out.println(node.getData());
        }
        //先序遍历二叉树
        static void xianIterator(TreeNode<?> node){
            out(node);
            TreeNode leftNode=node.getLeftNode();
            TreeNode rightNode=node.getRightNode();
            if(leftNode!=null){
                xianIterator(leftNode);
            }
            if(rightNode!=null){
                xianIterator(rightNode);
            }
        }
        //中序遍历二叉树
        static void zhongIterator(TreeNode<?> node){
            TreeNode<?> leftNode=node.getLeftNode();
            TreeNode<?> rightNode=node.getRightNode();
            if(leftNode!=null){
                zhongIterator(leftNode);
            }
            out(node);
            if(rightNode!=null){
                zhongIterator(rightNode);
            }
        }
        //后序遍历二叉树
        static void houIterator(TreeNode<?> node){
            TreeNode<?> leftNode=node.getLeftNode();
            TreeNode<?> rightNode=node.getRightNode();
            if(rightNode!=null){
                out(rightNode);
            }
            if(leftNode!=null){
                out(leftNode);
            }
            out(node);
        }
        //判断 二叉树的高度
        public static int getHeight(TreeNode<?> node){
            if(node==null){
                return 0;
            }else{
                int left=getHeight(node.getLeftNode());
                int right=getHeight(node.getRightNode());
                return left>=right?left+1:right+1;
            }
        }
        //得到树中的对象数量
        public static int getAllObjs(TreeNode<?> node){
            if(node==null){
                return 0;
            }else{
                TreeNode leftNode=node.getLeftNode();
                TreeNode rightNode=node.getRightNode();
                int leftNum=getAllObjs(leftNode);
                int rightNum=getAllObjs(rightNode);
                return leftNum+rightNum+1;
            }
        }
        //删除node以及其以下的数据
        static TreeNode<?> destroy(TreeNode<?> node){
            System.out.println("--");
            if(node!=null){
                TreeNode leftNode=node.getLeftNode();
                TreeNode rightNode=node.getRightNode();
                destroy(leftNode);
                destroy(rightNode);
                node=null;
            }
            return node;
        }
    }
    /*
     * 定义节点
     */
    class TreeNode<T>{
        private T data;
        private TreeNode<T> leftNode;
        private TreeNode<T> rightNode;
        
        public TreeNode() {
            
        }
        public TreeNode(T data, TreeNode<T> leftNode, TreeNode<T> rightNode) {
            super();
            this.data = data;
            this.leftNode = leftNode;
            this.rightNode = rightNode;
        }
        public TreeNode(T data) {
            this.data = data;
        }
        public TreeNode<T> getLeftNode() {
            return leftNode;
        }
        public void setLeftNode(TreeNode<T> leftNode) {
            this.leftNode = leftNode;
        }
        public TreeNode<T> getRightNode() {
            return rightNode;
        }
        public void setRightNode(TreeNode<T> rightNode) {
            this.rightNode = rightNode;
        }
        public T getData() {
            return data;
        }
        public void setData(T data) {
            this.data = data;
        }
        @Override
        public String toString() {
            return "TreeNode [data=" + data + ", leftNode=" + leftNode + ", rightNode=" + rightNode + "]";
        }
        
    }
  • 相关阅读:
    L2TP协议
    PPP协议
    centos 更新linux内核
    关于GRUB2
    误删除libc.so.6 恢复
    LVS DR模式 负载均衡服务搭建
    进程地址空间分布和可执行文件分布
    centos 开机启动服务
    【netcore基础】ConcurrentDictionary 使用字符串作为key给代码加锁且使用EF事物防止并发调用数据混乱的问题
    【年终总结】个人的2018年年终总结
  • 原文地址:https://www.cnblogs.com/m01qiuping/p/6503135.html
Copyright © 2011-2022 走看看