题解 | #合并二叉树#
合并二叉树
https://www.nowcoder.com/practice/7298353c24cc42e3bd5f0e0bd3d1d759
关键是要想到 Stack 里的元素用的 1v3 数组,气死个人
stack.push(new TreeNode[] {t1, t2, merged});
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param t1 TreeNode类 * @param t2 TreeNode类 * @return TreeNode类 */ public TreeNode mergeTrees (TreeNode t1, TreeNode t2) { // write code here if (t1 == null) { return t2; } if (t2 == null) { return t1; } // 合并当前节点 TreeNode merged = new TreeNode(t1.val + t2.val); // 递归合并左右子树 // merged.left = mergeTrees(t1.left,t2.left); // merged.right = mergeTrees(t1.right,t2.right); // 迭代 Stack<TreeNode[]> stack = new Stack<>(); stack.push(new TreeNode[] {t1, t2, merged}); // {t1, t2, merged} while (!stack.isEmpty()) { TreeNode[] nodes = stack.pop(); TreeNode node1 = nodes[0]; TreeNode node2 = nodes[1]; TreeNode mergedNode = nodes[2]; // 合并left if (node1.left != null || node2.left != null) { TreeNode leftNode = node1.left == null ? new TreeNode(0) : node1.left; TreeNode rightNode = node2.left == null ? new TreeNode(0) : node2.left; mergedNode.left = new TreeNode(leftNode.val + rightNode.val); stack.push(new TreeNode[] {leftNode, rightNode, mergedNode.left}); } // 合并right if (node1.right != null || node2.right != null) { TreeNode leftNode = node1.right == null ? new TreeNode(0) : node1.right; TreeNode rightNode = node2.right == null ? new TreeNode(0) : node2.right; mergedNode.right = new TreeNode(leftNode.val + rightNode.val); stack.push(new TreeNode[] {leftNode, rightNode, mergedNode.right}); } } return merged;// 返回合并后的根节点 } }