大家好今天给大家分享下一道 LeetCode 简单难度 的题目226. 翻转二叉树
题目
翻转一棵二叉树。 (图片来自leetcode)
分析
1.二叉树
2.左边的节点和右边的节点交换
3.返回数组
解法
*1.递归
2.迭代
解法一:递归
思路
1.从上到下的递归
2.每层交换节点
*/
var invertTree = function (root) {
if (!root) return root;
const { left, right } = root;
root.left = right;
root.right = left;
invertTree(root.left);
invertTree(root.right);
return root;
};
// @lc code=end
/* 复杂度
时间 O(n)
空间 O(n)
*/
解法二:迭代
思路
1.利用stack,从上到下,左右子节点交换
2.把左右节点放入stack中
3.stack.pop 取出节点,重复操作1
4.返回节点root
*/
var invertTree = function (root) {
if (!root) return root;
const stack = [];
stack.push(root);
while (stack.length) {
const node = stack.pop();
const { left, right } = node;
// 交换子节点
node.left = right;
node.right = left;
// 判断是否存在节点,存在再放入stack中
if (node.right) stack.push(node.right);
if (node.left) stack.push(node.left);
}
return root;
};
/* 复杂度
时间 O(n)
空间 O(n)
*/
总结
今天这道题是主要是练习对递归的理解和如何利用stack来模拟内部递归
大家可以看看我分享的一个专栏(前端搞算法)里面有更多关于算法的题目的分享,希望能够帮到大家,我会尽量保持每天晚上更新,如果喜欢的麻烦帮我点个赞,十分感谢
大家如果对“TS”感兴趣的可以看看我的专栏 (TypeScript常用知识),感谢大家的支持
文章内容目的在于学习讨论与分享学习算法过程中的心得体会,文中部分素材来源网络,如有侵权,请联系删除,邮箱 182450609@qq.com