• 树的前、中、后序遍历


    import java.util.Stack;
    
    /**
     * @Author: 
     * @Date: 2018/9/28 11:36
     */
    
    public class TreeSort {
        public static void main(String[] args) {
            TreeNode level4_1 = new TreeNode(8,null,null);
            TreeNode level4_2 = new TreeNode(9,null,null);
            TreeNode level3_1 = new TreeNode(4,null,null);
            TreeNode level3_2 = new TreeNode(5,level4_1,level4_2);
            TreeNode level3_3 = new TreeNode(6,null,null);
            TreeNode level3_4 = new TreeNode(7,null,null);
            TreeNode level2_1 = new TreeNode(2,level3_1,level3_2);
            TreeNode level2_2 = new TreeNode(3,level3_3,level3_4);
            TreeNode root = new TreeNode(1,level2_1,level2_2);
            Stack<TreeNode> stack = new Stack();
            preOrderSort(stack,root.getLeft(),root,root.getRight());
            System.out.println("前-----------");
            while(stack.size()!=0) {
                System.out.println(stack.pop().getVal());
            }
            System.out.println("中-----------");
    
            midOrderSort(stack,root.getLeft(),root,root.getRight());
            while(stack.size()>0) {
                System.out.println(stack.pop().getVal());
            }
            System.out.println("后-----------");
            backOrderSort(stack,root.getLeft(),root,root.getRight());
            while(stack.size()!=0) {
                System.out.println(stack.pop().getVal());
            }
            System.out.println("深度-----------="+depthTree(root));
            System.out.println("宽度-----------="+widthTree(root));
    
        }
    
        private static int widthTree(TreeNode root) {
            Stack<TreeNode> cStack = new Stack<>();
            cStack.push(root);
            int maxWidth = cStack.size();
            while(true) {
                Stack<TreeNode> stack = new Stack<>();
                while(cStack.size()>0) {
                    TreeNode node = cStack.pop();
                    TreeNode nodeLeft = node.getLeft();
                    if(nodeLeft!=null) {
                        stack.push(nodeLeft);
                    }
                    TreeNode nodeRight = node.getRight();
                    if(nodeRight!=null) {
                        stack.push(nodeRight);
                    }
                }
                cStack = stack;
                maxWidth = Math.max(maxWidth,stack.size());
                if(stack.size()==0) {
                    break;
                }
            }
            return maxWidth;
        }
    
        private static int depthTree(TreeNode node) {
            if(node!=null) {
                if(node.getLeft()==null && node.getRight() ==null) {
                    return 1;
                }else {
                    int countLeft = 0;
                    if(node.getLeft()!=null) {
                        countLeft = depthTree(node.getLeft());
                    }
                    int countRight = 0;
                    if(node.getRight() !=null) {
                        countRight = depthTree(node.getRight());
                    }
                    return 1 + Math.max(countLeft,countRight);
                }
            }else {
                return 0;
            }
        }
    
        private static void backOrderSort(Stack<TreeNode> cStack,TreeNode leftNode,TreeNode node,TreeNode rightNode) {
            if(leftNode!=null) {
                if(leftNode.getLeft()==null) {
                    cStack.push(leftNode);
                }else {
                    backOrderSort(cStack,leftNode.getLeft(),leftNode,leftNode.getRight());
                }
            }
            if(rightNode!=null) {
                if(rightNode.getLeft()==null && rightNode.getRight()==null ) {
                    cStack.push(rightNode);
                }else {
                    backOrderSort(cStack,rightNode.getLeft(),rightNode,rightNode.getRight());
                }
            }
            cStack.push(node);
        }
    
        private static void midOrderSort(Stack<TreeNode> cStack,TreeNode leftNode,TreeNode node,TreeNode rightNode) {
            if(leftNode!=null) {
                if(leftNode.getLeft()==null) {
                    cStack.push(leftNode);
                }else {
                    midOrderSort(cStack,leftNode.getLeft(),leftNode,leftNode.getRight());
                }
            }
            cStack.push(node);
            if(rightNode!=null) {
                if(rightNode.getLeft()==null && rightNode.getRight()==null ) {
                    cStack.push(rightNode);
                }else {
                    midOrderSort(cStack,rightNode.getLeft(),rightNode,rightNode.getRight());
                }
            }
        }
    
        private static void preOrderSort(Stack<TreeNode> cStack,TreeNode leftNode,TreeNode node,TreeNode rightNode) {
            cStack.push(node);
            if(leftNode!=null) {
                if(leftNode.getLeft()==null) {
                    cStack.push(leftNode);
                }else {
                    preOrderSort(cStack,leftNode.getLeft(),leftNode,leftNode.getRight());
                }
            }
            if(rightNode!=null) {
                if(rightNode.getLeft()==null && rightNode.getRight()==null ) {
                    cStack.push(rightNode);
                }else {
                    preOrderSort(cStack,rightNode.getLeft(),rightNode,rightNode.getRight());
                }
            }
        }
    }
    
    class TreeNode{
        private int val;
        private TreeNode left;
        private TreeNode right;
        public TreeNode(int val,TreeNode left,TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    
        public int getVal() {
            return val;
        }
    
        public TreeNode getLeft() {
            return left;
        }
    
        public TreeNode getRight() {
            return right;
        }
    }
    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    转: MySQL 赋予用户权限(grant %-远程和localhost-本地区别)
    修改Apache的最大连接数
    正向代理与反向代理的区别【Nginx读书笔记】
    mysql加单引号和不加单引号的性能比较
    mysql保存数据提示1366 Incorrect string value: ‘xF0x9Fx98x8AxF0x9F…’ 解决
    Mysql外键约束设置使用方法
    MYSQL分库分表和不停机更改表结构
    Hive SQL 常用日期
    CountDownLatch学习
    Exchanger学习
  • 原文地址:https://www.cnblogs.com/use-D/p/9721150.html
Copyright © 2020-2023  润新知