📅  最后修改于: 2023-12-03 15:42:16.184000             🧑  作者: Mango
给定一颗二叉树,编写一个函数 isBST()
来判断该二叉树是否为二叉搜索树。
输入的参数为一个根节点的指针。每个节点包含三个成员:节点值、左子节点指针和右子节点指针。注意:该指针可能为 null。
函数应该返回一个布尔值,如果二叉树是二叉搜索树,则返回 true,否则返回 false 。
例如,对于下面的二叉树,函数 isBST()
应该返回 false。
5
/ \
2 7
/ \
1 6
题目要求我们判断给定的二叉树是否为二叉搜索树。而对于二叉搜索树这种数据结构来说,它具有以下特点:
按照以上定义,我们可以采用中序遍历二叉树的方式来判断它是否为二叉搜索树。因为对于一个二叉搜索树,它的中序遍历结果必然是按照键值从小到大排列的。因此,我们可以按照中序遍历对二叉树进行遍历,判断得到的键值序列是否是递增的。
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def isBST(root):
# 用于存储中序遍历的结果
inorder = []
def traverse(node):
if not node:
return
# 先遍历左子树
traverse(node.left)
# 对接到中序遍历序列的尾部
inorder.append(node.val)
# 再遍历右子树
traverse(node.right)
# 中序遍历树
traverse(root)
# 判断中序遍历结果是否递增
return inorder == sorted(inorder)
本题的思路较为简单,要注意的是需要对边界条件进行处理,如节点为 null 等。同时,对于二叉搜索树的定义,需要熟悉它的特点以便来判断是否为二叉搜索树。