一、描述
給定一棵二叉樹,如何判斷一棵樹是否是二叉排序樹。給出樹結點定義如下
class TreeNode { int key; TreeNode left; TreeNode right; public TreeNode(int key) { this.key = key; } }
二、解題思路
根據二叉排序樹的性質,在進行中序遍歷的時候,當前結點的值總是大於前驅結點的值,需要在遍歷時保存前驅結點的值,這樣有利於進行判斷,基於這樣的思路來進行解題。
三、代碼
根據以上的解題思路(遍歷時利用二叉排序樹的性質),即可得到如下的代碼。
/** * Created by LEESF on 2016/9/8. */ class TreeNode { int key; TreeNode left; TreeNode right; public TreeNode(int key) { this.key = key; } } public class IsBSTree { static boolean flag = true; static int last = Integer.MIN_VALUE; public static boolean isBSTree(TreeNode root) { if (root.left != null && flag) isBSTree(root.left); if (root.key < last) flag = false; last = root.key; if (root.right != null && flag) isBSTree(root.right); return flag; } }
