题解 | #二叉树的镜像#

二叉树的镜像

https://www.nowcoder.com/practice/a9d0ecbacef9410ca97463e4a5c83be7

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param pRoot TreeNode类
     * @return TreeNode类
     */
    public TreeNode Mirror (TreeNode pRoot) {
        // write code here
        if (pRoot == null)return null;
        return reverse(pRoot);

    }

    private TreeNode reverse(TreeNode pRoot) {
        if (pRoot == null) return null;
        // 找最右边
        TreeNode left = reverse(pRoot.right);
        // 找最左边
        TreeNode right = reverse(pRoot.left);
        // 镜像赋值
        pRoot.left = left;
        pRoot.right = right;
        return pRoot;
    }
  
  
      /*非递归,借助栈*/
    public TreeNode Mirror2 (TreeNode pRoot) {
        // write code here
        if (pRoot == null) {
            return null;
        }
        Stack<TreeNode> stack = new Stack<>();
        stack.push(pRoot);
        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            TreeNode tempNode = node.left;
            node.left = node.right;
            node.right = tempNode;
            if (node.left != null) {
                stack.push(node.left);
            }
            if (node.right != null) {
                stack.push(node.right);
            }
        }
        return pRoot;
    }
}

解题思想:递归遍历左右子树做交换。或者非递归借助栈特性逐渐翻转

#算法##算法笔记#
全部评论

相关推荐

03-28 19:11
铜陵学院 C++
有礼貌的山羊追赶太阳:太典了,连笔试都没有开始就因为HC满了而结束了,而且还卡你不让你再投其他部门的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务