算法期中 合并二叉树

来源:互联网 发布:刘涛的淘宝店铺 编辑:程序博客网 时间:2024/06/05 14:24

Problem:

输入两个二叉树T1和T2,要求对T1和T2进行合并. 合并是指将二叉树同一位置节点上的数求和,作为合并后二叉树相应位置节点的数值. 如果某个位置上只有一个二叉树有节点,则合并后的二叉树对应位置上的节点上的数值就等于这个节点上的数值.

例如:         T1                        T2          1                         2                                     /  \                       /  \                                   3   2                     1   3                              /                            \    \                            5                             4   7  合并后:            3           /  \          4   5         /  \    \        5   4   7

T1和T2的结点数均不多于100000,每个结点的数值在1和1000之间.

请为下面的Solution类实现解决上述问题的merge函数,函数的两个参数T1和T2分别代表两个二叉树的根节点,函数返回值为合并后的二叉树的根节点.

  Definition for a binary tree node.  struct TreeNode {      int val;      TreeNode *left;      TreeNode *right;      TreeNode(int x) : val(x), left(NULL), right(NULL) {}  };class Solution {public:       TreeNode* merge(TreeNode* T1, TreeNode* T2) { }};

Code:

class Solution {public:    TreeNode* merge(TreeNode* T1, TreeNode* T2) {        visit(T1, T2);        return T1;    }    void visit(TreeNode *T1, TreeNode* T2) {        if (T1 == NULL && T2 == NULL)            return;        if (T1 != NULL && T2 != NULL)            T1->val += T2->val;        if (T1 != NULL && T2 == NULL)            return;        if (T1->left == NULL && T2->left != NULL) {            T1->left = new TreeNode(0);        }        if (T1->right == NULL && T2->right != NULL) {            T1->right = new TreeNode(0);        }        visit(T1->left, T2->left);        visit(T1->right, T2->right);    }};                                 
原创粉丝点击