/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @author Senky * @date 2023.08.01 * @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1 * @brief * 时间复杂度O(n)空间复杂度O(n) : * 如果两颗树的当前节点均存在,那么将它们的值相加,并递归合并左子树和右子树。 * 如果一颗树的节点为空,而另一颗树的节点不为空,那么将非空树的节点作为合并后树的节点。 * 如果两颗树的节点均为空,那么直接返回空节点。 * 时间复杂度O(n)空间复杂度O(1) : * 在这个问题中,我们可以将其中一棵树作为参照,然后将另一棵树上缺少的节点添加到参照树上,而不需要创建新的节点。 * 如果参照树节点不为空,而另一棵树节点为空,则将参照树节点保留不变,因为它是合并后的结果。 * 如果参照树节点为空,而另一棵树节点不为空,则将参照树节点用另一棵树节点替换,因为它是合并后的结果。 * 如果参照树节点和另一棵树节点均不为空,则将它们的值相加,并递归合并它们的左子树和右子树。 * @param t1 TreeNode类 * @param t2 TreeNode类 * @return TreeNode类 */ #include <stdlib.h> struct TreeNode* mergeTrees(struct TreeNode* t1, struct TreeNode* t2 ) { // write code here if(NULL == t1) { return t2; } if(NULL ==t2) { return t1; } //由于这里会递归调用,而且生成的结点自动会将数据域和左右指针域赋正确的值 struct TreeNode* MergeTree = (struct TreeNode*)malloc(sizeof(struct TreeNode)); MergeTree->val = t1->val + t2->val; MergeTree->left = mergeTrees(t1->left, t2->left); MergeTree->right = mergeTrees(t1->right, t2->right); return MergeTree; }
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @author Senky * @date 2023.08.01 * @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1 * @brief * 时间复杂度O(n)空间复杂度O(n) : * 如果两颗树的当前节点均存在,那么将它们的值相加,并递归合并左子树和右子树。 * 如果一颗树的节点为空,而另一颗树的节点不为空,那么将非空树的节点作为合并后树的节点。 * 如果两颗树的节点均为空,那么直接返回空节点。 * 时间复杂度O(n)空间复杂度O(1) : * 在这个问题中,我们可以将其中一棵树作为参照,然后将另一棵树上缺少的节点添加到参照树上,而不需要创建新的节点。 * 如果参照树节点不为空,而另一棵树节点为空,则将参照树节点保留不变,因为它是合并后的结果。 * 如果参照树节点为空,而另一棵树节点不为空,则将参照树节点用另一棵树节点替换,因为它是合并后的结果。 * 如果参照树节点和另一棵树节点均不为空,则将它们的值相加,并递归合并它们的左子树和右子树。 * @param t1 TreeNode类 * @param t2 TreeNode类 * @return TreeNode类 */ #include <stdlib.h> struct TreeNode* mergeTrees(struct TreeNode* t1, struct TreeNode* t2) { if (t1 == NULL) { return t2; } if (t2 == NULL) { return t1; } t1->val += t2->val; t1->left = mergeTrees(t1->left, t2->left); t1->right = mergeTrees(t1->right, t2->right); return t1; }