1. 二叉树的前序遍历
var preorderTraversal = function (root) {
let result = [];
let helper = function (node) {
result.push(node.val);
node.left && helper(node.left);
node.right && helper(node.right);
}
root && helper(root);
return result;
};
2. 二叉树的中序遍历
方法一:递归
var inorderTraversal = function(root) {
let result = [];
let helper = function(node){
node.left && helper(node.left);
result.push(node.val);
node.right && helper(node.right);
}
root && helper(root);
return result;
};
方法二:栈
var inorderTraversal = function(root) {
let stack = [];
let result = [];
while (root || stack.length){
while (root){
stack.push(root);
root = root.left;
}
root = stack.pop();
result.push(root.val);
root = root.right;
}
return result;
};
3. 验证二叉搜索树
方法一:递归
实现思路:从根节点起递归调用左右子树,并且每一次都将节点的值作为子节点判断时的边界
var isValidBST = function(root) {
let helper = function (node, lower, upper) {
if(!node) return true;
if(node.val <= lower || node.val >= upper) return false;
return walk(node.left, lower, node.val) && walk(node.right, node.val, upper);
}
return helper(root, -Infinity, Infinity);
};
方法二:中序遍历
实现思路:中序遍历二叉搜索树后可以得到升序的数组,在遍历过程中判断数据是否为升序
var isValidBST = function(root) {
let stack = [];
let inorder = -Infinity;
while (root || stack.length){
while (root){
stack.push(root);
root &#