前序遍历 中序遍历 后序遍历 (递归实现)
二叉搜索树(查询树) 插入 删除 查找
平衡二叉搜索树(红黑树)
递归树(分析时间复杂度)
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); } };