题解 | #合并二叉树#

合并二叉树

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;

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

全部评论

相关推荐

牛客263158796号:我领羊一面后十天不挂也不推进 今天问hr说等前序的第一批意向发完看情况再看是否推进
点赞 评论 收藏
分享
10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务