1. 程式人生 > >合併兩棵二叉樹

合併兩棵二叉樹

給定兩棵任意的二叉樹,將其合併,返回合併後的根節點。

思路:
這裡寫圖片描述
基於先序遍歷,如果root1存在就和root2的val相加,如果root1不存在,就把root2的引用直接賦值給root1。

程式碼如下:

public class Main {

    public static void main(String args[]) {

        TreeNode root1 = new TreeNode(1);
        TreeNode root1right = new TreeNode(2);
        root1.right = root1right;

        TreeNode root2 = new
TreeNode(3); TreeNode root2left = new TreeNode(4); root2.left = root2left; TreeNode node1 = new TreeNode(5); TreeNode node2 = new TreeNode(6); root2left.left = node1; root2left.right = node2; TreeNode r = null; TreeNode root = merge(root1, root2); System.out
.println("合併後的樹先序遍歷如下:"); midTran(root);//先序遍歷 } public static void midTran(TreeNode root) { if (root == null) return; System.out.println(root.val); if (root.left != null) midTran(root.left); if (root.right != null) midTran(root.right); } public
static TreeNode merge(TreeNode root1, TreeNode root2) { if (root1 == null) return root2; return mergeCore(root1, root2); } public static TreeNode mergeCore(TreeNode root1, TreeNode root2) { if (root2 != null) { root1.val += root2.val; if (root1.left == null) root1.left = root2.left; else mergeCore(root1.left, root2.left); if (root1.right == null) root1.right = root2.right; else mergeCore(root1.right, root2.right); } return root1; } } TreeNode定義如下:
public class TreeNode{
        int val = 0;
        TreeNode left = null, right = null;
        public TreeNode(int val){
        this.val = val;
        }
    }

輸出如下:

合併後的樹先序遍歷如下:
4
4
5
6
2
“`