题解 | #合并二叉树#

合并二叉树

https://www.nowcoder.com/practice/7298353c24cc42e3bd5f0e0bd3d1d759

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param t1 TreeNode类 
     * @param t2 TreeNode类 
     * @return TreeNode类
     */
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        // write code here
        //使用后序遍历的方式解决此题

        //递归出口
        if(t1==nullptr)//如果t1为空了,直接返回t2,t2下面的结点也不用处理了
            return t2;
        if(t2==nullptr)
            return t1;
        

        //递归处理左右结点
        TreeNode* leftNode=mergeTrees(t1->left, t2->left);
        TreeNode* rightNode=mergeTrees(t1->right,t2->right);

        //左右孩子已经遍历合并完成
        //合并当前结点
        t1->val+=t2->val;

        //连接到t1上
        t1->left=leftNode;
        t1->right=rightNode;


        return t1;



        
    }
};

此题使用后序遍历的方法解决,在思路上前序遍历也是可以的,相当于先合并根结点,在递归合并他的左右子树。

前序遍历代码

t1->val+=t2->val;

TreeNode* leftNode=mergeTrees(t1->left, t2->left);

TreeNode* rightNode=mergeTrees(t1->right,t2->right);

t1->left=leftNode;

t1->right=rightNode;

无论是那种遍历只要保证递归出口正确,子问题操作与原问题相同即可

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 14:10
点赞 评论 收藏
分享
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
码农索隆:有点耳熟,你们是我教过最差的一届
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务