下面这道题引发了不少思考。越来也越觉得,前中后序遍历 理解 的重要性。
98. 验证二叉搜索树
基本性质,二叉搜索树的中序遍历是升序
最顺的思路就是
1)对 二叉搜索树进行 中序遍历 得到结果 ans
2)判断 ans 是否为升序
优化思路:
在 1)中序遍历过程中,就顺带判断中序遍历的结果
1.标准中序
var isValidBST = function(root) {let ans = [];function dfs(node) { // 有两种思路理解这段代码:1)递归思路,2)遍历思路if (!node) {return;}dfs(node.left);ans.push(node.val);dfs(node.right);}dfs(root);console.log(ans);}
2. 优化
var isValidBST = function(root) {let is = true;let ans = [];function dfs(node) { // 有两种思路理解这段代码:1)递归思路,2)遍历思路if (!node) {return;}if (!is) {return;}dfs(node.left);if (node.val <= ans[ans.length - 1]) {is = false;return;}ans.push(node.val);dfs(node.right);}dfs(root);return is;}
3.去掉数组
var isValidBST = function(root) {let is = true;// let ans = [];let pre = -Infinity;function dfs(node) { // 有两种思路理解这段代码:1)递归思路,2)遍历思路if (!node) {return;}if (!is) {return;}dfs(node.left);if (node.val <= pre) { // 这里决定了pre初始化的值is = false;return;}pre = node.val;dfs(node.right);}dfs(root);return is;}
