题目
给你一棵二叉树的根节点
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; };
坚持努力,无惧未来!