【数据结构与算法】(九)二叉树
前序遍历 中序遍历 后序遍历 (递归实现)
二叉搜索树(查询树) 插入 删除 查找
平衡二叉搜索树(红黑树)
递归树(分析时间复杂度)
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);
}
};
浙公网安备 33010602011771号