哎今天做的事又少了,昨天没睡好搞得好困。
leetcode就写了8个题,把留的最小生成树的算法作业完成了,计网作业还没写= =,明天必须必须写了!
Lowest Common Ancestor of a Binary Search Tree
都是树的,基本上都是树的dfs,然后递归判断的。这也是树递归中最基本的地方。贴几个写的代码吧
找树高度
int maxDepth(TreeNode* root)
{
if(!root) return 0;
return 1+max(maxDepth(root->left),maxDepth(root->right));
}
判断树是否平衡(我用树高判断的,感觉有更好的方法明天看看)
bool balanced=true;
int getHeight(TreeNode*r)
{
if(!r) return 0;
return 1+max(getHeight(r->left),getHeight(r->right));
}
void travel(TreeNode*r)
{
if(!r) return;
if(r->left) travel(r->left);
if(r->right) travel(r->right);
balanced=balanced&&(abs(getHeight(r->left)-getHeight(r->right))<=1);
}
bool isBalanced(TreeNode* root) {
if(!root) return true;
travel(root);
return balanced;
}
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==NULL&&q==NULL) return true;
if(p&&!q||!p&&q||p->val!=q->val) return false;
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
int num=0;
bool judge=false;
void dfs(TreeNode*r,int sum)
{
if(judge||!r) return ;
num+=r->val;
if(r->left) dfs(r->left,sum);
if(r->right) dfs(r->right,sum);
if(!r->left&&!r->right) judge=judge||num==sum;
num-=r->val;
}
bool hasPathSum(TreeNode* root, int sum) {
dfs(root,sum);
return judge;
}
明天leetcode+计网 ( +编译原理),要图书馆泡一天了
好困赶紧睡了zzzzzz