层序遍历
其实就是广度优先搜索,借助队列来实现!
层序遍历的模板
var levelOrder = function(root) {
//二叉树的层序遍历
let res = [], queue = [];
queue.push(root);
if(root === null) {
return res;
}
while(queue.length !== 0) {
// 记录当前层级节点数
let length = queue.length;
//存放每一层的节点
let curLevel = [];
for(let i = 0;i < length; i++) {
let node = queue.shift();
curLevel.push(node.val);
// 存放当前层下一层的节点
node.left && queue.push(node.left);
node.right && queue.push(node.right);
}
//把每一层的结果放到结果数组
res.push(curLevel);
}
return res;
};
226.翻转二叉树 (优先掌握递归)
只能使用前序和后序遍历,不能使用中序遍历,画图举例就可以知道的
交换左右节点,要创立一个中间节点
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var invertTree = function(root) {
dfs(root)
return root
};
function dfs(root) {
if(root === null) return
let node = new TreeNode()
node = root.left
root.left = root.right
root.right = node
invertTree(root.left)
invertTree(root.right)
}
101. 对称二叉树 (优先掌握递归)
1.当需要收集根节点的信息,返回给上一级,用到后序遍历
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isSymmetric = function(root) {
return compare(root.left,root.right)
};
function compare(left,right) {
if(left ===null && right ===null) return true
if(left === null || right === null) return false
// 左右
let leftBool = compare(left.left,left.right)
let rightBool = compare(right.left,right.right)
// 中:把中的结果返回给上一个节点
return leftBool && rightBool
}