【2024考研】题解21| #按值加成合并二叉树#
合并二叉树
https://www.nowcoder.com/practice/7298353c24cc42e3bd5f0e0bd3d1d759
/**傻逼题我还以为一个一个的连呢 * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @param t1 TreeNode类 * @param t2 TreeNode类 * @return TreeNode类 */ TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { // write code here if(t1 == NULL) return t2; if(t2 == NULL) return t1; //新节点合并相同值 TreeNode *head = new TreeNode(t1->val + t2->val); //同时递归遍历两颗树 head->left = mergeTrees(t1->left, t2->left); head->right = mergeTrees(t1->right, t2->right); return head; } };
算法思想:
- 使用递归的方式合并两棵二叉树。
- 如果两棵树中的对应节点都为空,则返回空。
- 如果其中一棵树的对应节点为空,则返回另一棵树的对应节点。
- 如果两棵树的对应节点都不为空,则创建一个新节点,值为两棵树对应节点的值之和,并递归合并左子树和右子树。
时间复杂度:
O(n),其中n是两棵二叉树中节点的个数较大的那棵树的节点个数。需要遍历每个节点一次。
空间复杂度:
O(n),递归调用栈的深度最大为较大的那棵树的高度,最坏情况下,两棵树都是链表,高度为n,因此空间复杂度是O(n)。
2024考研数据结构 文章被收录于专栏
本人考研刷算法题,立此专栏练习强化。