很基础的知识,简单复习,做个记录
/* 中序遍历 */
// t94 - 中序遍历 - 递归 68 ms 37.7 MB
var inorderTraversal = function(root,res = []) {
if(!root) return res;
inorderTraversal(root.left,res);
res.push(root.val);
inorderTraversal(root.right,res);
return res;
};
// t94 - 中序遍历 - 迭代 64 ms 37.9 MB
let stack = [], res = [], r = root;
while (r) { stack.push(r); r = r.left; }
while (stack.length > 0) {
let mid = stack.pop(); // 取出来的是left已经访问完的中部节点
res.push(mid.val);
if (mid.right) {
r = mid.right;
while (r) { stack.push(r); r = r.left; }
}
}
return res;
// t144 - 前序遍历 - 迭代 92 ms 37.8 MB
var preorderTraversal = function(root) {
let res = [],stack = [root];
if(!root) return res;
while(stack.length > 0){
let t = stack.pop();
res.push(t.val);
if(t.right) stack.push(t.right);
if(t.left) stack.push(t.left);
}
return res;
};
// t145 - 后序遍历 - 迭代 72 ms 38.9 MB
var postorderTraversal = function (root) {
let stack = [], res = [];
if (!root) return res;
let r = root;
while (r) {
stack.push([r,0]);
r = r.left;
}
while (stack.length > 0) {
let [mid,tag] = stack.pop();
if (mid.right && tag == 0) {
stack.push([mid,1]);
r = mid.right;
while (r) {
stack.push([r,0]);
r = r.left;
}
} else{
res.push(mid.val);
}
}
return res;
};
/* 层序遍历 */
// t102 - 层序遍历 - 迭代 72 ms 39.7 MB
/* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
if(!root) return [];
let que = [[root,0]],res = [];//结果要求二维数组,所以登记了层数
while(que.length > 0){
let tmp = que.shift();
if(res[tmp[1]]) res[tmp[1]].push(tmp[0].val)
else res[tmp[1]] = [tmp[0].val];
if(tmp[0].left) que.push([tmp[0].left,tmp[1]+1]);
if(tmp[0].right) que.push([tmp[0].right,tmp[1]+1]);
}
return res;
};
// t102 - 层序遍历 - 迭代 84 ms 39.3 MB
var levelOrder = function(root) {
if(!root) return [];
let que = [root],res = [];
while(que.length > 0){
let len = que.length; // 不登记层数,记录本层层数也可。
let t = [];
while(len){
t.push(que[0].val);
if(que[0].left) que.push(que[0].left);
if(que[0].right) que.push(que[0].right);
que.shift();
len--;
}
res.push(t);
}
return res;
};
/* 求树深度 */
// t104 - 树深度 - 递归 72 ms 40.7 MB
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function (root) {
function height(node) {
if (!node) return 0;
let [hl, hr] = [height(node.left), height(node.right)];
return hl > hr ? hl + 1 : hr + 1;
}
// 内部写函数快过直接 MaxDepth 递归
return height(root);
};