【数据结构与算法】(九)二叉树

前序遍历  中序遍历  后序遍历  (递归实现)

二叉搜索树(查询树)  插入  删除  查找

平衡二叉搜索树(红黑树)

递归树(分析时间复杂度)

LeetCode

1  二叉树的最近公共祖先

2  验证二叉搜索树

思路: 二叉搜索树  除了左子节点<节点  右子节点>节点  这个规则外, 还有一个规则是所有的左子树节点,都应该小于该节点    所有右子树节点都应大于该节点。(因为二叉搜索树构造的时候是从祖节点开始构造的,默认形成这个规则)

class Solution {
public:
    bool isValidBST(TreeNode* root) {
     if (root==NULL){
         return true;
     }
     
     if(!isValidBST(root->left)||!isValidBST(root->right)){
         return false;
     
     }
     return preOrderLeft(root->left,root)&&preOrderRight(root->right,root);   //所有的左子树节点,都应该小于该节点    所有右子树节点都应大于该节点。(因为二叉搜索树构造的时候是从祖节点开始构造的,默认形成这个规则)
                                                                              //使用中序遍历,遍历所有节点
    }
    bool preOrderLeft(TreeNode* root,TreeNode* p){
        if(root==NULL) return true;
        if(root->val>=p->val) return false;
        return preOrderLeft(root->left,p)&&preOrderLeft(root->right,p);
    }
    bool preOrderRight(TreeNode* root,TreeNode* p){
        if(root==NULL) return true;
        if(root->val<=p->val) return false;
        return preOrderRight(root->left,p)&&preOrderRight(root->right,p);
    }
};

  

猜你喜欢

转载自www.cnblogs.com/jiwen/p/11441136.html