前端算法-翻转二叉树

简介: 前端算法-翻转二叉树

题目

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

输入: root = [4,2,7,1,3,6,9]
输出: [4,7,2,9,6,3,1]

题解

我们这里可以采用递归的方式进行实现,我们首先判断传入的root出参是否为空,为空情况下直接返回null,如果不为空则往下执行,下面是一个左右节点互换的操作,我们先声明一个tmp变量,作为互换的中转站,我们先将root出参的左节点存到tmp变量中,然后在将root出参的右节点存到root的左节点中,然后在将tmp变量赋值给root出参的右节点上,以此完成数据的互换操作,然后在将root的左节点作为参数传给自身函数进行执行,也将root的右节点作为参数传给自身函数进行执行,以此完成反转,最后返回root出参

/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var invertTree = function(root) {
          if (!root) return null;
            let tmp=root.left;
            root.left=root.right;
            root.right=tmp;
            invertTree(root.left);
            invertTree(root.right);
            return root;
};

我们这里还有另一种思路,先判断root出参是否为空,为空返回null,然后声明一个stack变量,它是一个栈用于存储root出参,然后我们使用循环,循环的终止条件是stack变量长度为0,在循环内部我们声明一个tmp变量,用于存储反转后的值,然后去循环stack栈,在循环中我们声明一个tmpNode变量,借用该变量完成当前循环值左右节点的互换,然后判断当前值的左节点存在的情况下,就使用push方法添加到tmp变量中,右节点也如此,当循环结束后,我们在将tmp变量赋值给stack变量,最后将root出参返回出去

/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var invertTree = function(root) {
  if (!root) return null;
  let stack = [root];
  while(stack.length!=0) {
    const tmp = [];
    for (let item of stack) {
      let tmpNode = item.left;
      item.left = item.right;
      item.right = tmpNode;
      if (item.left) tmp.push(item.left);
      if (item.right) tmp.push(item.right);
    }
    stack = tmp;
  }
  return root;
};

坚持努力,无惧未来!

相关文章
|
4天前
|
前端开发 算法
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
|
6天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
15 1
|
6天前
|
算法 前端开发
前端算法之快速排序
前端算法之快速排序
14 0
|
6天前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
13 0
|
4天前
|
缓存 算法 前端开发
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
|
6天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
11 1
|
6天前
|
算法 前端开发 搜索推荐
前端算法之桶排序
前端算法之桶排序
7 1
|
6天前
|
存储 算法 前端开发
前端算法之计数排序
前端算法之计数排序
12 1
|
6天前
|
算法 前端开发 搜索推荐
前端算法之希尔排序
前端算法之希尔排序
4 0
|
6天前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
12 0