28_二叉树的镜像

2020-05-22  本文已影响0人  是新来的啊强呀

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

二叉树的镜像
思路:先前序遍历这颗树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换玩所有非叶子结点的左、右子节点之后,就得到树的镜像。
方法一:利用栈(或队列)遍历树的所有节点 node ,并交换每个 node 的左 / 右子节点。
方法二:根据二叉树镜像的定义,考虑递归遍历(dfs)二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。

public class L28_MirrorRecursive {
    // 使用栈
    public TreeNode0 MirrorRecursive(TreeNode0 root){
        if(root==null){
            return null;
        }
        Stack<TreeNode0> stack = new Stack<>();
        stack.add(root);
        while(!stack.isEmpty()){
            TreeNode0 node = stack.pop();
            if(node.left!=null){
                stack.add(node.left);
            }
            if(node.right!=null){
                stack.add(node.right);
            }
            TreeNode0 temp = node.left;
            node.left = node.right;
            node.right = temp;
        }
        return root;
    }
    // 使用递归
    public TreeNode0 Mirror(TreeNode0 root){
        if(root == null){
            return null;
        }
        TreeNode0 temp = root.left;
        root.left = Mirror(root.right);
        root.right = Mirror(temp);
        return root;
    }
}
上一篇下一篇

猜你喜欢

热点阅读