leetcode刷题(9)——226.翻转二叉树

一、题目

翻转一棵二叉树。

示例:
在这里插入图片描述

二、思路及代码实现

方法一:递归

借鉴反转链表: https://blog.csdn.net/weixin_45594025/article/details/104907136

运用递归思维,先翻转节点的孩子,最后翻转整棵树。过程如下:

假设根节点的左、右孩子已经成功翻转,可得到:
在这里插入图片描述
此时,只需将根节点的左、右孩子互换,即可完成翻转。结果如下:
在这里插入图片描述
代码如下:

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null || (root.left == null && root.right == null))
            return root;
        TreeNode node = root;
        TreeNode leftChild = invertTree(node.left);;
        TreeNode rightChild = invertTree(node.right);;
        root.left = rightChild;
        root.right = leftChild;
        return root;
    }
}

方法二:迭代

翻转二叉树就是把二叉树每个节点的左、右孩子互换。可以利用队列进行处理,过程如下:

  • 创建一个队列,刚开始先把根节点加入队列;
  • 只要队列不空,每次从队列中出队一个节点,互换其左、右孩子,并将该节点不为空的孩子节点入队;
  • 最终队列为空时,所有的孩子互换完毕,返回最初的根节点。

代码如下:

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null){
            return root;
        }
        LinkedList<TreeNode> list = new LinkedList<>();
        list.add(root);
        while(!list.isEmpty()){
            TreeNode current = list.poll();
            TreeNode temp = current.left;
            current.left = current.right;
            current.right = temp;
            if(current.left != null)
                list.add(current.left);
            if(current.right != null)
                list.add(current.right);
        }
        return root;
    }
}
发布了56 篇原创文章 · 获赞 0 · 访问量 930

猜你喜欢

转载自blog.csdn.net/weixin_45594025/article/details/104974475