Leetcode_#617_合并二叉树

原题:#617_合并二叉树

  • 递归
    • 结束条件:一个根节点为空时,另一个根节点直接作为新的子结点
    • 递归操作:对应节点相加
    • 返回值:若在树1上操作,则返回树1根节点
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        if (t1 == null)
            return t2;
        if (t2 == null)
            return t1;
        t1.val += t2.val;
        t1.left = mergeTrees(t1.left, t2.left);
        t1.right = mergeTrees(t1.right, t2.right);
        return t1;
    }

  • 迭代
  • 使用堆栈,首先存入两根节点
  • 若两根节点都有左孩子,则存放入堆栈,若只有一个根节点右左孩子,则作为新的左孩子,右孩子同理。
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;
    }
原创文章 50 获赞 1 访问量 2934

猜你喜欢

转载自blog.csdn.net/u014642412/article/details/105904272