解法:主要考察二叉树的遍历方式,前、中、后遍历都可。这里使用前序遍历解答。注意考虑节点不存在null的情况。注意stack进栈的对象数组,出栈也只能是对象数组,需要起个名字。
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { // t1, t2是根节点
if (t1 == null) {
return t2;
}
Stack<TreeNode[]> stack = new Stack<>();
stack.push(new TreeNode[] {t1, t2});
while (!stack.isEmpty()) {
TreeNode[] t = stack.pop(); // t是对象数组,循环第一次第一项t[0]是t1, 第二项t[1]是t2
if (t[0]==null || t[1]==null)
continue;
t[0].val += t[1].val;
//注意压栈顺序,先压右子节点
if (t[0].right==null)
t[0].right = t[1].right;
else
stack.push(new TreeNode[] {t[0].right, t[1].right});
//后左子节点
if (t[0].left==null)
t[0].left = t[1].left;
else
stack.push(new TreeNode[] {t[0].left, t[1].left});
}
return t1;
}