合併二叉樹(leetcode-617)
阿新 • • 發佈:2021-07-01
題目
給定兩個二叉樹,想象當你將它們中的一個覆蓋到另一個上時,兩個二叉樹的一些節點便會重疊。
你需要將他們合併為一個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 NULL 的節點將直接作為新二叉樹的節點。
示例網站上看吧。
注意: 合併必須從兩個樹的根節點開始
思路
遞迴求解。只要兩棵樹的根節點不為空,那麼就可以分解為左子樹和右子樹兩個獨立的問題。如果有空的根節點,那麼直接返回另一個即可。如果兩個都是空就返回空。
程式碼
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} }; class Solution { public: TreeNode *mergeTrees(TreeNode *root1, TreeNode *root2) { if (root1 == nullptr and root2 == nullptr) return nullptr; else if (root1 == nullptr) return root2; else if (root2 == nullptr) return root1; else { TreeNode* l = mergeTrees(root1->left, root2->left); TreeNode* r = mergeTrees(root1->right, root2->right); return new TreeNode(root1->val += root2->val, l, r); } } };
程式碼解釋
我們的注意力放在當前指向的節點本身,不關注這個節點的左右節點。