和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

JZ18 二叉树的镜像

原题链接

描述

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

比如:    源二叉树 
            8
           /  \
          6   10
         / \  / \
        5  7 9 11
        
        
        镜像二叉树
            8
           /  \
          10   6
         / \  / \
        11 9 7  5

示例

输入:{8,6,10,5,7,9,11}
返回值:{8,10,6,11,9,7,5}

思路

使用递归不停地交换左右子树就可以了吧。


解答

import java.util.*;

public class Solution {

    public void swap(TreeNode root){
        TreeNode tmp;
        tmp = root.left;
        root.left = root.right;
        root.right = tmp;
    }

    public TreeNode Mirror(TreeNode pRoot) {
        if (pRoot==null)
            return null;

        swap(pRoot);
        Mirror(pRoot.left);
        Mirror(pRoot.right);

        return pRoot;
    }
}

还有一个非递归版本:

import java.util.*;

public class Solution {

    public TreeNode Mirror(TreeNode pRoot) {
        if (pRoot==null)
            return null;
        Stack<TreeNode> stack = new Stack<>();
        stack.push(pRoot);
        while (!stack.empty()){
            TreeNode  t = stack.pop();
            TreeNode tmp = t.left;
            t.left = t.right;
            t.right = tmp;
            
            if (t.left != null) stack.push(t.left);
            if (t.right != null) stack.push(t.right);
        }
        
        return pRoot;
    }
}
posted @ 2021-07-28 08:35  klaus08  阅读(33)  评论(0)    收藏  举报