Leetcode-二叉树
98.验证二叉搜索树
class Solution {
public:
bool isValidBST(TreeNode* root) {
if(!root)
return true;
vector<int> res = order_traversal(root);
for(int i = 1; i < res.size(); ++i){
if(res[i] <= res[i-1])
return false;
}
return true;
}
vector<int> order_traversal(TreeNode* root){
vector<int> res;
if(!root)
return res;
stack<TreeNode* > s;
TreeNode* tmp = root;
while(tmp || !s.empty()){
while(tmp){
s.push(tmp);
tmp = tmp->left;
}
tmp = s.top();
s.pop();
res.push_back(tmp->val);
tmp = tmp->right;
}
return res;
}
};
- 二叉搜索树的中序遍历是有序的
543.二叉树的直径
class Solution {
public:
int res;
int diameterOfBinaryTree(TreeNode* root) {
res = 0;
depth(root);
return res;
}
int depth(TreeNode* root){
if(!root)
return 0;
int l = depth(root->left);
int r = depth(root->right);
res = max(l+r, res);
return max(l, r)+1;
}
};
思路:
- 二叉树的直径不一定过根节点,因此需要去搜一遍所有子树(例如以root,root.left, root.right…为根节点的树)对应的直径,取最大值。
- root的直径 = root左子树高度 + root右子树高度
- root的高度 = max {root左子树高度, root右子树高度} + 1