持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情
226.翻转二叉树
题目解析
题目要求翻转二叉树,也就是将节点的左右孩子互换。这道题有很多种解法,因为二叉树有很多种遍历的方式。但是在这里由于是一刷,我就只使用最简单递归的方式解决。
解决
这道题的解决如下:
var invertTree = function(root) {
if(!root) {
return null
}
const rightNode = root.right
root.right = invertTree(root.left)
root.left = invertTree(rightNode)
return root
};
思路就是将根结点的右子节点暂存在一个变量中,在递归的将根节点的左右子节点调换。
101. 对称二叉树
题目分析
题目给出一个二叉树,要求检查它是否轴对称。轴对称就要求了这道题比较的并不是左右节点。
解决
- 确定递归函数的参数和返回值
递归函数的参数是要比较的左右两边的节点,返回值是一个布尔值
- 确定终止条件
终止条件就是当左右不轴对称的时候。首先判断节点为空的情况:第1种是左节点为空,但是右节点并不为空,那么就不对称;第2种是左节点为空,但是右节点为空也不对称;第3点是左右都为空,那么就是对称的。
另外当所有节点都不会空的时候,比较节点数字,相同就返回true不相同返回false。
- 确定单层循环逻辑
单层地柜的逻辑就是比较二叉树外侧和内侧是否对称,如果都对称就返回trie,否则返回false。
代码如下:
var isSymmetric = function(root) {
const compareNode = function(left,right) {
if(left === null && right !== null || left !== null && right === null) return false
else if(left === null && right === null) return true
else if(left.val !== right.val) return false
let outSide = compareNode(left.left,right.right)
let inSide = compareNode(left.right,right.left)
return outSide && inSide
}
if(root === null) return true
return compareNode(root.left,root.right)
};
总结
这两题中第1题比较简单,第2题要考虑很多情况,最好在写代码前就清楚的列出。