您的位置:首页 > 其它

二叉树5:判断一棵树是否是搜索二叉树

2019-03-14 20:35 337 查看

**搜索二叉树(BST):**所谓搜索二叉树,即左子树上的所有节点都比根节点的小,注意是所有;右子树上的所有节点都比根节点的大。所有搜索二叉树有一个特点,如果采用的是中序遍历的方法遍历这棵二叉树的话,那么这个序列一定是单调递增的。

思想:怎么判断是否是一棵搜索二叉树呢,我们可以通过中序遍历这棵二叉树的方法,如果这个序列是单调递增的那么这棵树一定是搜索二叉树。使用中序遍历的非递归方法可以很简单的就判断是否是二叉树。
代码:

import java.util.Stack;
public class Demo{
public static class Node {
public int val;
public Node left;
public Node right;

public Node(int data) {
this.val = data;
}
}
public static boolean isBST(Node head) { //中序遍历 非递归
int pre = Integer.MIN_VALUE;//定义一个变量来存放前面的那个数
if (head != null) {
Stack<Node> stack = new Stack<Node>();
while (!stack.isEmpty() || head != null) { //这个条件是当head在最高的节点时和head的左边为空时这个边界
if (head != null) {  //把左边的节点依次压入栈中
stack.push(head);
head = head.left;
} else {
head = stack.pop(); //左边已经为空了,弹出,看右边有没有节点
if(head.val < pre){
return false;
}
pre = head.val;
head = head.right;
}
}
}
return true;
}
public static void main(String args[]){
Node head = new Node(4);
head.left = new Node(2);
head.right = new Node(6);
head.left.left = new Node(1);
head.left.right = new Node(3);
head.right.left = new Node(5);
head.right.right = new Node(7);
System.out.println(isBST(head));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: