【面試】判斷一棵二叉樹是否為二叉排序樹


一、描述

  給定一棵二叉樹,如何判斷一棵樹是否是二叉排序樹。給出樹結點定義如下

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;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM