zoukankan      html  css  js  c++  java
  • 二叉树深度遍历和广度遍历

    https://blog.csdn.net/weixin_39912556/article/details/82852749

    package Method;
    
    import java.util.ArrayDeque;
    import java.util.Deque;
    import java.util.Queue;
    import java.util.Stack;
    
    /**
     * Created by joyce on 2019/9/11.
     */
    public class TreeMain {
        private static class TreeNode {
            public TreeNode left;
            public TreeNode right;
            private String val;
            public TreeNode(String _val) {
                val = _val;
            }
            public void echo() {
                System.out.println(val);
            }
    
            public TreeNode setLeft(TreeNode left) {
                this.left = left;
                return this;
            }
    
            public TreeNode setRight(TreeNode right) {
                this.right = right;
                return this;
            }
        }
    
        public static void main(String [] f) {
            TreeNode D = new TreeNode("D");
            TreeNode E = new TreeNode("E");
            TreeNode F = new TreeNode("F");
            TreeNode G = new TreeNode("G");
            TreeNode B = new TreeNode("B").setLeft(D).setRight(E);
            TreeNode C = new TreeNode("C").setLeft(F).setRight(G);
            TreeNode A = new TreeNode("A").setLeft(B).setRight(C);
            DB(A);
            DBD(A);
            WB(A);
    
        }
    
        /**
         * 深度
         * @param root
         */
        public static void DB(TreeNode root) {
            Stack<TreeNode> stack = new Stack<>();
            stack.push(root);
            while (!stack.isEmpty()) {
                TreeNode treeNode = stack.pop();
                treeNode.echo();
                if(treeNode.right != null) {
                    stack.push(treeNode.right);
                }
                if(treeNode.left != null) {
                    stack.push(treeNode.left);
                }
            }
        }
    
        /**
         * 深度 递归
         * @param root
         */
        public static void DBD(TreeNode root) {
            if(root == null)
                return;
            root.echo();
            DBD(root.left);
            DBD(root.right);
        }
    
        /**
         * 广度
         * @param root
         */
        public static void WB(TreeNode root) {
            Deque<TreeNode> deque = new ArrayDeque<>();
            deque.add(root);
            while (!deque.isEmpty()) {
                TreeNode treeNode = deque.remove();
                treeNode.echo();
                if(treeNode.left != null) {
                    deque.add(treeNode.left);
                }
                if(treeNode.right != null) {
                    deque.add(treeNode.right);
                }
            }
        }
    }
    

  • 相关阅读:
    Linux下升级gcc版本(9.1.0版本)
    Linux/CentOS系统同步网络时间的2种方法详解
    为什么使用promise
    总结js深拷贝和浅拷贝
    js闭包理解
    select框实现多选的功能
    动态添加element-ui组件
    总结鼠标移入移出事件
    echarts提示框太长,导致显示不全 ,撑大div框的问题
    vue项目中管理定时器
  • 原文地址:https://www.cnblogs.com/silyvin/p/11505527.html
Copyright © 2011-2022 走看看