网络异常,图片无法展示
|
实现一个函数,检查一棵二叉树是否为二叉搜索树。
示例 1:
输入: 2 / \ 1 3 输出: true 复制代码
示例 2:
输入: 5 / \ 1 4 / \ 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。 复制代码
解题思路
二叉搜索树的性质:
对于任意一棵子树,根节点的值大于左子节点的值,根节点的值小于右子节点的值
基于以上二叉搜索树的性质,如果对二叉搜索树进行中序遍历的话,将会得到一个严格升序的序列,
所以,我们可以对输入二叉树进行中序遍历,如果遍历过程中发现节点值违反了严格升序的性质,则说明当前二叉树不是二叉搜索树。
代码实现
var isValidBST = function(root) { // 前一个节点的值 是否是合法二叉搜索树标识 let pre = null,res = true; // 中序遍历 function inorder(node){ if(node === null) return; inorder(node.left); // 如果pre为null,说明当前是第一个节点,更新pre值为当前节点值 if(pre === null) pre = node.val else{ // 如果pre小于当前节点值,更新pre if(pre<node.val) pre = node.val else{ // 否则说明当前节点处违反了二叉搜索树的性质 res = false; return; } } inorder(node.right); } inorder(root); // 返回结果 return res; }; 复制代码
至此我们就完成了 leetcode-面试题 04.05-合法二叉搜索树
如有任何问题或建议,欢迎留言讨论!