1.求另一棵树的子树
题目
前序遍历一样,形状不一定一样。
子树:以任何一个节点做根都可以看做是根子树。
也就是说需要让subroot和每一个子树都比较相同的时候就一样。找出左边这棵树的所有子树
思路:如何找到左边的所有子树?
找到所有节点就是找到了所有子树——遍历这棵树。
代码实现:
//求另一棵树的子树
#include<stdio.h>
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)//题目中已经给出
{
//首先判断是否为空,若是空则说明肯定不与子树相同
if (root == NULL)
return false;
//当不为空的时候,需要判断根是否相等,并且以这个节点为根的两个子树也需要相等
//数据结构——二叉树相关习题2/1中有如何判断两个树相同用isSameTree
if ((root->val == subRoot->val) && isSameTree(root, subRroot)
{
return true;
}
//如果子树不同那就继续向下看以子树为根的时候是否相同,直接返回,如果有一个是相同的直接返回真,所以用或
return isSubtree(root->left, subRoot) || isSubtree(root->right, subRoot));//两个单词连接用大写;
}