二叉树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)); } }
相关文章推荐
- 二叉树问题---判断一棵树是否为搜索二叉树
- 二叉树面试题之判断一棵树是否为另一棵树的子树
- 二叉树经典面试题4~判断一棵树是否是完全二叉树
- 二叉树镜像(递归和非递归)+ 判断一棵二叉树是否是平衡二叉树+ 判断一棵树是否为完全二叉树
- 判断一棵树是否是完全二叉树和求二叉树中两个节点的最近公共祖先——题集(十三)
- 【BST】判断一棵二叉树是否是搜索二叉树
- 二叉树经典面试题4~判断一棵树是否是完全二叉树
- 二叉树系列问题——判断一棵树是否为完全二叉树
- 算法-判断是否为搜索二叉树
- [互联网面试笔试汇总C/C++-15] 判断一棵二叉树是否是完全搜索树-微策略
- 二叉树--判断一棵树是否是完全二叉树
- 【二叉树】C++判断一棵树是否为另一棵树的子树【需考虑海量数据处理中的栈溢出】
- 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)
- 判断是否是搜索二叉树
- 判断一棵二叉树,是否是搜索二叉树
- 二叉树问题---判断数组是否为某搜索二叉树的后序遍历的结果
- 二叉树6:判断一棵树是否是完全二叉树
- 判断二叉树是否是搜索二叉树和完全二叉树
- 剑指offer 判断数组的后序遍历是否为搜索二叉树
- 剑指offer24判断某一序列是否是某一搜索二叉树的后续遍历结果