一、二叉树的遍历
1.前序遍历
var preorderTraversal = function(root) {
if(!root) return [];
const res = [];
const stack = [root];
while(stack.length!=0){
let node = stack.pop();
res.push(node.val);
if(node.right) stack.push(node.right);
if(node.left) stack.push(node.left);
}
return res;
};
2.中序遍历
var inorderTraversal = function(root) {
const res = [];
const inorder = (root)=>{
if(!root){
return;
}
inorder(root.left);
res.push(root.val);
inorder(root.right);
}
inorder(root)
return res;
};
3.后序遍历
var postorderTraversal = function(root) {
if(!root) return [];
const res = [];
const stack = [root];
while(stack.length != 0){
let node = stack.pop();
res.unshift(node.val);
if(node.left) stack.push(node.left);
if(node.right) stack.push(node.right);
}
return res;
};
二、翻转二叉树
var invertTree = function(root) {
if(root == null) return null;
let left = invertTree(root.left)
let right = invertTree(root.right)
const temp = root.left
root.left = root.right;
root.right = temp;
return root
};
var invertTree = function(root) {
if(root == null) return null;
const temp = root.left;
root.left = root.right;
root.right = temp;
invertTree(root.left)
invertTree(root.right)
return root;
};
三、平衡二叉树
var isBalanced = function(root) {
let flag = true;
const maxDepth = (root) => {
if(root == null) return 0;
let leftMaxDepth = maxDepth(root.left);
let rightMaxDepth = maxDepth(root.right);
if(Math.abs(rightMaxDepth - leftMaxDepth) > 1) {
flag = false;
}
return Math.max(leftMaxDepth, rightMaxDepth) + 1;
};
maxDepth(root);
return flag;
};
四、二叉树的所有路径
var binaryTreePaths = function(root) {
let res=[];
const getPath=function(node,cur){
if(node.left===null&&node.right===null){
cur+=node.val;
res.push(cur);
return ;
}
cur+=node.val+'->';
node.left&&getPath(node.left,cur);
node.right&&getPath(node.right,cur);
}
getPath(root,'');
return res;
};