程序员面试金典--检查是否为BST

程序员面试金典--检查是否为BST

题目描述

请实现一个函数,检查一棵二叉树是否为二叉查找树。

给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/

class Checker {
public:
    bool flag; 
    
    int Get(TreeNode* rt){
        if(rt->left== NULL && rt->right==NULL){
            return rt->val; 
        }
        int ans = rt->val; 
        if(rt->left){
            int lr = Get(rt->left); 
            if(lr > rt->val){
                flag = false; 
            }
            ans = max(ans, lr); 
        }
        
        if(rt->right){
            int rg = Get(rt->right); 
            if(rt->val > rg){
                flag = false; 
            }
            ans = max(ans, rg); 
        } 
        return ans; 
    }
    
    bool checkBST(TreeNode* root) {
        // write code here 
        if(root == NULL){
            return true; 
        }
        flag = true; 
        Get(root); 
        return flag; 
        
    }
};

  

原文地址:https://www.cnblogs.com/zhang-yd/p/7137258.html