希赛考试网
首页 > 软考 > 软件设计师

判断一个二叉树是否是二叉排序树

希赛网 2024-01-30 08:50:01

二叉排序树也叫做二叉搜索树,是一种常见的二叉树数据结构。它有着以下特点:

1. 每个节点最多有2个子节点。

2. 左子树中所有节点的值都小于该节点的值。

3. 右子树中所有节点的值都大于该节点的值。

4. 没有重复的节点值。

在本文中,我们将从多个角度来分析判断一个二叉树是否是二叉排序树。

角度一:递归法判断二叉树是否是二叉排序树

递归法是最简单的方法之一,具体实现方式如下:

1. 如果当前节点为空,则说明已经遍历到末尾,返回true。

2. 如果当前节点的左子树不为空,则递归检查左子树。

3. 如果当前节点的值小于等于左子树最大节点的值,则说明不是二叉排序树。

4. 如果当前节点的右子树不为空,则递归检查右子树。

5. 如果当前节点的值大于等于右子树最小节点的值,则说明不是二叉排序树。

6. 如果都满足以上条件,则二叉树是二叉排序树。

代码示例:

```java

public boolean isBST(TreeNode root) {

return isBST(root, Long.MIN_VALUE, Long.MAX_VALUE);

}

private boolean isBST(TreeNode root, long minVal, long maxVal) {

if(root == null) {

return true;

}

if(root.val <= minVal || root.val >= maxVal) {

return false;

}

return isBST(root.left, minVal, root.val) && isBST(root.right, root.val, maxVal);

}

```

角度二:中序遍历法判断二叉树是否是二叉排序树

在中序遍历法中,我们需要先遍历左子树,处理当前节点,再遍历右子树。如果当前节点比上一个节点的值小,则说明不是二叉排序树。

代码示例:

```java

public boolean isBST(TreeNode root) {

Stack stack = new Stack<>();

long preVal = Long.MIN_VALUE;

while(root != null || !stack.isEmpty()) {

while(root != null) {

stack.push(root);

root = root.left;

}

root = stack.pop();

if(root.val <= preVal) {

return false;

}

preVal = root.val;

root = root.right;

}

return true;

}

```

角度三:BST性质判断二叉树是否是二叉排序树

如果我们已经知道该二叉树的所有节点的值,可以直接判断是否满足二叉排序树的性质。

代码示例:

```java

public boolean isBST(int[] nums) {

for(int i=1; i

if(nums[i] <= nums[i-1]) {

return false;

}

}

return true;

}

```

微信扫一扫,领取最新备考资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考报考咨询

微信扫一扫,定制学习计划