617-Merge Two Binary Trees
Description
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.
You need to merge them into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of new tree.
Example 1:
Input:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
Output:
Merged tree:
3
/ \
4 5
/ \ \
5 4 7
問題描述
給定兩個二叉樹, 你需要將它們合併, 兩個樹有些部分存在重疊。
合併的規則為, 如果兩個節點重疊, 將兩個節點的值之和作為新節點的值, 否則, 非空節點作為新節點
問題分析
解法1(遞迴)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
if(t1 == null && t2 == null) return null;
//若節點為空, 其值為0
int val1 = (t1 == null ? 0 : t1.val), val2 = (t2 == null ? 0 : t2.val);
//建立新節點
TreeNode node = new TreeNode(val1 + val2);
node.left = mergeTrees(t1 != null ? t1.left : null,t2 != null ? t2.left : null);
node.right = mergeTrees(t1 != null ? t1.right : null,t2 != null ? t2.right : null);
return node;
}
}
解法2(stack)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
if(t1 == null) return t2;
Stack<TreeNode[]> stack = new Stack();
stack.push(new TreeNode[] {t1, t2});
while(!stack.isEmpty()){
TreeNode[] t = stack.pop();
if(t[0] == null || t[1] == null) continue;
t[0].val += t[1].val;
if(t[0].left == null){
t[0].left = t[1].left;
}else{
stack.push(new TreeNode[] {t[0].left, t[1].left});
}
if(t[0].right == null){
t[0].right = t[1].right;
}else{
stack.push(new TreeNode[] {t[0].right, t[1].right});
}
}
return t1;
}
}
相關文章
- 【LeetCode】617. Merge Two Binary TreesLeetCode
- LeetCode 617. Merge Two Binary TreesLeetCode
- LeetCode 1305 All Elements in Two Binary Search TreesLeetCode
- go Exercise: Equivalent Binary TreesGoUI
- LeetCode之All Possible Full Binary Trees(Kotlin)LeetCodeKotlin
- 題解:CF1237E Balanced Binary Search Trees
- 96-Unique Binary Search Trees 二叉搜尋樹的數量
- Trees
- Trees and Segments
- Traversal of trees
- 力扣 653. 兩數之和 IV 二叉樹/binary-tree two-sum IV力扣二叉樹
- Trees and XOR Queries AgainAI
- coca after two months vs in two months
- Binary Colouring
- The trees stand together with ability ranks and rune words
- 默克爾樹 Merkle trees(一)
- LSM(Log Structured Merge Trees ) 筆記Struct筆記
- LeetCode之Leaf-Similar Trees(Kotlin)LeetCodeMILAKotlin
- Two Pirates - 2
- Two Pointer Method
- MySQL Binary LogMySql
- Traversals of binary tree
- [20181220]Bushy Join Trees in Oracle 12.2.txtOracle
- 11.23 Two Different Worlds
- LeetCode | 1 Two SumLeetCode
- Tokitsukaze and Two Colorful Tapes
- F - Two Sequence Queries
- Merge Two Sorted List
- Leetcode 231 Power of TwoLeetCode
- Leetcode 1 two sumLeetCode
- B. Quasi Binary
- Leetcode Binary Tree PathsLeetCode
- Leetcode 67 Add BinaryLeetCode
- 迴歸樹(Regression Trees)模型的優缺點模型
- The Network Program Log Two (Scapy)
- LeetCode | 349 Intersection Of Two ArraysLeetCode
- H-Two Convex PolygonsGo
- B. Two Out of Three