617. 合併二叉樹(點擊查看原題)
解題思路
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) {
return t2;
}
if (t2==null) {
return t1;
}
t1.val=t1.val+t2.val;
t1.left=mergeTrees(t1.left, t2.left);
t1.right=mergeTrees(t1.right, t2.right);
return t1;
}
}
2. 迭代法
/**
* 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) {
return t2;
}
Stack<TreeNode[]> stack=new Stack<TreeNode[]>();
stack.push(new TreeNode[]{t1,t2});
while (!stack.isEmpty()) {
TreeNode[] treeNodes=stack.pop();
if (treeNodes[0]==null||treeNodes[1]==null) {
continue;
}
treeNodes[0].val+=treeNodes[1].val;
if (treeNodes[0].left==null) {
treeNodes[0].left=treeNodes[1].left;
}else {
stack.push(new TreeNode[] {treeNodes[0].left,treeNodes[1].left});
}
if (treeNodes[0].right==null) {
treeNodes[0].right=treeNodes[1].right;
}else {
stack.push(new TreeNode[] {treeNodes[0].right,treeNodes[1].right});
}
}
return t1;
}
}