美文网首页
28_二叉树的镜像

28_二叉树的镜像

作者: 是新来的啊强呀 | 来源:发表于2020-05-22 16:55 被阅读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;
        }
    }
    

    相关文章

      网友评论

          本文标题:28_二叉树的镜像

          本文链接:https://www.haomeiwen.com/subject/ltytahtx.html