LeetCode算法学习之--Recursion--翻转二叉树

276 阅读1分钟

大家好今天给大家分享下一道 LeetCode 简单难度 的题目226. 翻转二叉树

题目

翻转一棵二叉树。 (图片来自leetcode)

image.png

分析

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