- 给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
if (p==NULL && q==NULL)//两个都为空
return ture;
if (p!=NULL && q!=NULL)//两个都不为空
return (p->val==q->val)&&isSameTree(p->left,q->left)
&&isSameTree(p->right,q->right);
else return false;//一个为空,一个不为空
}
- 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
思路:可以引用一个isSametree函数,如果是子树,则两个部分肯定相等
bool isSametree (struct TreeNode* p,struct TreeNode* q){
if (p==NULL && q==NULL){
return true;}
if (p!=NULL && q!=NULL){
return (p->val==q->val)&&isSametree(p->left,q->left)
&&isSametree(p->right,q->right);}
else {
return false;}
}
bool isSubtree(struct TreeNode* s, struct TreeNode* t){
if(s==NULL){
return false;}
if(isSametree(s,t){
//判断两棵树是否完全相等
return true;}
if(isSubtree(s->left,t)){
//判断左子树是否为子树
return true;}
if(isSubtree(s->right,t)){
//判断右子树是否为子树
return true;}
else {
return false;}
}
- 给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
int maxDepth(struct TreeNode* root){
if (root==NULL)
return 0;
int ldepth = maxDepth(root->left);
int rdepth = maxDepth(root->rigth);
return ldepth>rdepth?ldepth+1:rdepth+1;
}