试写一个判别给定二叉树是否为二叉排序树的算法。以前序遍历序列和中序遍历序列给出该二叉树的结点,并创建该二叉树。然后再进行判断。请注意,树中结点关键字可能相同。 【样例输入1】 6 4 5 8 6 9 0 4 5 6 6 8 9 0 【样例输出1】 true 【样例输入2】 6 4 7 8 0 4 7 6 8 0 【样例输出2】 false
时间: 2023-12-30 11:04:12 浏览: 164
算法之二叉树的层序遍历(利用队列实现,需熟练手写)
5星 · 资源好评率100%
这是一个 Python 代码示例,实现二叉排序树的判断:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def build_tree(preorder, inorder):
if not preorder or not inorder:
return None
root_val = preorder[0]
root = TreeNode(root_val)
idx = inorder.index(root_val)
root.left = build_tree(preorder[1:idx+1], inorder[:idx])
root.right = build_tree(preorder[idx+1:], inorder[idx+1:])
return root
def is_bst(root):
def is_bst_helper(node, min_val, max_val):
if not node:
return True
if not min_val <= node.val <= max_val:
return False
return (is_bst_helper(node.left, min_val, node.val-1) and
is_bst_helper(node.right, node.val+1, max_val))
return is_bst_helper(root, float('-inf'), float('inf'))
preorder = list(map(int, input().split()))
inorder = list(map(int, input().split()))
root = build_tree(preorder, inorder)
print(is_bst(root))
```
输入数据格式:第一行为前序遍历序列,第二行为中序遍历序列。输出数据格式:true 或 false,表示该二叉树是否为二叉排序树。
注意:本代码没有对输入数据进行特判,如序列长度不一致等情况。在实际应用中需要进行相应的处理。
阅读全文