Leetcode-100.相同的树
Posted Booksort
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode-100.相同的树相关的知识,希望对你有一定的参考价值。
根据题目描述,得判断两个树是否完全一样。就如上的例子而言是一个完全一样的二叉树没错。
而
看起来是对称的,但并不意味着这是一个完全相同的二叉树。
对于左边的树而言是
[1,2]
而右边的树却是
[1,NULL,2]
是不一样的。
依旧可以利用二叉树的特性:根节点,左子树,右子树。
而每个子树又可再次分为根节点与左右子树。就利用这个性质。
两个二叉树要相同的前提是,
两个树的左右子树要依次相同,并且根节点也要相同(虽然会被不断子树化),但利用不断划分子树的性质去不断比较子树的根节点是否相同。
则这道题的思路和单值二叉树
的思路差不多。利用左右子树的性质。
利用左右子树的性质不断划分子树,也就是通过递归不断区分子树。区分子树后,我们还需要判断每个子树的其根节点是否与另一颗树的对应的根节点是否相同。
总结不断划分子树,同时比较两颗树的对应的根节点是否相同,不断递归去划分子树比较根节点。
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
if(p==NULL&&q==NULL)
return true;
else if(p==NULL||q==NULL)
return false;
else if(p->val!=q->val)
return false;
else
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
这块就是每次划分子树后,比较每个个根节点的情况。
if(p==NULL&&q==NULL)
return true;
else if(p==NULL||q==NULL)
return false;
else if(p->val!=q->val)
return false;
递归划分子树,同时,递归结束后,判断其子树是否满足true&&true的情况,。
else
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
对于二叉树的简单类的题目,一定要考虑是否能利用二叉树的性质结合递归去解决问题
以上是关于Leetcode-100.相同的树的主要内容,如果未能解决你的问题,请参考以下文章