leetcode算法

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;
    }
}
發佈了65 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章