合併兩棵二叉樹

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

思路:
這裏寫圖片描述
基於先序遍歷,如果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
“`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章