• 【面试】判断一棵二叉树是否为二叉排序树


    一、描述

      给定一棵二叉树,如何判断一棵树是否是二叉排序树。给出树结点定义如下

    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;
        }
    }
  • 相关阅读:
    html常用标签与扩展(标签语义化、Doctype)
    html认识
    兼容性问题统计
    最短的包含字符串 (尺取法)
    与7 无关的数(前缀和)
    子序列(尺取入门)
    孪生素数
    vector 详解
    进制转换(高级版^^)
    容斥 mobius反演
  • 原文地址:https://www.cnblogs.com/leesf456/p/5854461.html
Copyright © 2020-2023  润新知