zoukankan      html  css  js  c++  java
  • (树)判断二叉树是否为BST

    • 题目:判断一颗二叉树是否为BST。
    • 思路:其实这个问题可以有多个解决方法。
    • 方法一:递归解决。根据BST的特性。左边的小于根节点的值,右边的大于根节点的值。并且对于每一棵子树都是如此。所以我们可以直接递归的对左右子树的值与根节点的值进行比较。左子树的值小于当前根节点的值,将当前根节点的值作为最大值传入左子树,左子树的值都小于他,递归处理;右子树的值都大于根节点的值,将根节点的值作为最小值传入右子树,右子树的值都大于他。
    • 代码:
      /**
       * Definition for binary tree
       * struct TreeNode {
       *     int val;
       *     TreeNode *left;
       *     TreeNode *right;
       *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
       * };
       */
      class Solution {
      public:
          bool isValidBST(TreeNode *root) {
              return isValidBST(root, INT_MIN, INT_MAX);
          }
          bool isValidBST(TreeNode *root, int low, int high){
              if (root == NULL )
                  return true;
              if (low < root->val && root->val < high)
                  return (isValidBST(root->left, low, root->val) && isValidBST(root->right, root->val, high));
              else
                  return false;
          }
      };
    • 方法二:因为BST特性,所以我们可以利用遍历方法对他进行解决。对树进行中序遍历,将结果存储在vector中,如果容器中的值是递增排序的,那么它就是BST,否则就不是。
    • 代码:
      /**
       * Definition for binary tree
       * struct TreeNode {
       *     int val;
       *     TreeNode *left;
       *     TreeNode *right;
       *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
       * };
       */
      class Solution {
      public:
          bool isValidBST(TreeNode *root) {
              vector<int> res;
              isValidBST(root, res);
              int len = res.size();
              bool flag = true;
              for (int i=0; i<len-1; i++){
                  if (res[i] >= res[i+1]){
                      flag = false;
                      break;
                  }
              }
              return flag;
          }
          void isValidBST(TreeNode *root, vector<int> &res){
              if (root == NULL)
                  return;
              
              isValidBST(root->left, res);
              res.push_back(root->val);
              isValidBST(root->right, res);
          }
      };
  • 相关阅读:
    大数据Hadoop-2
    大数据Hadoop-1
    Consistent Hashing
    分支的创建、删除、切换、合并以及冲突解决
    windows WEB 高可用/可伸缩
    Oracle行转列、列转行的Sql语句总结
    从零到百亿互联网金融架构发展史---架构变迁
    WebJars
    springcloud(五):熔断监控Hystrix Dashboard和Turbine
    SpringBoot编写自定义的starter 专题
  • 原文地址:https://www.cnblogs.com/Kobe10/p/6357950.html
Copyright © 2011-2022 走看看