简单- LeetCode 226. 翻转二叉树

题目

来源: 翻转二叉树
翻转一棵二叉树。

示例

在这里插入图片描述

解题思路及代码
1. 思路

递归的交换每个结点的左右子结点即可。

2.代码
var invertTree = function(root) {
	if (root == null) {
        return null;
    }
    var temp = root.right;
    root.right =root.left;
    root.left = temp;
    invertTree(root.left);
    invertTree(root.right);
    return root;
};

另:
本题也可考虑用层序遍历,采用队列来存放遍历到的元素,首先将根结点放入队列中,然后取出该结点,并交换其左右子树,然后判断:当前结点的左子树是否为空?不为空则放入队列;当前结点的右子树是否为空?不为空则放入队列。然后继续取出队列中的每个结点,进行如上操作。

var invertTree = function(root) {
    
    if (root == null) {
        return null;
    }
    var temQueue = [root];
    while (temQueue.length != 0) {
        var temp = temQueue.shift();
        var left = temp.right;
        temp.right = temp.left;
        temp.left = left;
        if (temp.right != null) {
            temQueue.push(temp.right);
        }
        if (temp.left != null) {
            temQueue.push(temp.left);
        }
    }
    return root;
};

总结
一开始也考虑到层序遍历,但是想的过于复杂,想着把每一层放进队列后再依次翻转,例如left = root.left 先放入队列,然后right = root.right 放入队列,然后取出left, 令root.right = left,left的左右子结点放入队列中。。。。主要还是对二叉树的特性没弄清楚,交换 root.left 和 root.right 实际上是交换了左右两个子树。
然后又想到如果将其翻转,实际上得到了其镜像二叉树,但是代码没调成功,而且这样也增加了空间复杂度。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值