자바 이 진 트 리 의 미 러 구현

주어진 이 진 트 리 를 작 동 하여 원본 이 진 트 리 의 미 러 로 변환 합 니 다.
코드
    static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        public TreeNode(int val) {
            this.val = val;
        }
    }

    /**
     *            
     *          x       |       x    
     *      y       z   |   z        y    
     * @param root
     */
    public static void mirror(TreeNode root) {
        //        ,    
        if (root == null) {
            return;
        }
        //             ,    
        if (root.left == null && root.right == null) {
            return;
        }
        //        ,           
        if (root.left != null) {
            mirror(root.left);
        }
        //        ,           
        if (root.right != null) {
            mirror(root.right);
        }
        //               
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
    }

    /**
     *              
     *          x       |       x    
     *      y       z   |   z        y    
     * @param root
     */
    public static void mirrorByStack(TreeNode root) {
        //        ,    
        if (root == null) {
            return;
        }
        //             ,    
        if (root.left == null && root.right == null) {
            return;
        }
        //             ,    null     ,   null,           stack 
        //        
        //                5
        //            3       18
        //        2       4
        //      5      ,          ,        ,   
        //                5
        //            18      3
        //                2       4
        //    18 3  stack ,          3,         ,      ,   
        //                5
        //            18      3
        //                4       2
        //    4 2  stack ,        2,4,18,      ,             
        Stack stack = new Stack<>();
        //           
        stack.push(root);
        //                    
        while (stack.size() > 0) {
            //          ,              
            TreeNode node = stack.pop();
            //            null,          
            if (node.left != null || node.right != null) {
                TreeNode temp = node.left;
                node.left = node.right;
                node.right = temp;
            }

            //        , push   ,       
            if (node.left != null) {
                stack.push(node.left);
            }
            //        , push   ,       
            if (node.right != null) {
                stack.push(node.right);
            }
        }
    }

    /**
     *        
     * @param root
     */
    private static void printTree(TreeNode root) {
        if (root == null) {
            return;
        }
        System.out.print(root.val + " ");
        printTree(root.left);
        printTree(root.right);
    }

    public static void main(String[] args) {
        TreeNode root = buildTree1();
        printTree(root);
        mirrorByStack(root);
        System.out.println();
        printTree(root);
    }

    /**
     *   tree1:
     *              5
     *          3       18
     *      2       4
     * @return
     */
    private static TreeNode buildTree1(){
        TreeNode root = new TreeNode(5);
        TreeNode left = new TreeNode(3);
        TreeNode left1 = new TreeNode(2);
        TreeNode right1 = new TreeNode(4);
        left.left = left1;
        left.right = right1;
        TreeNode right = new TreeNode(18);
        root.left = left;
        root.right = right;
        return root;
    }

좋은 웹페이지 즐겨찾기