LeetCode-617-バイナリツリーを結合(単純)


1.説明

2つのバイナリツリーが与えられた場合、それらの一方をもう一方にオーバーレイすると、2つのバイナリツリーの一部のノードがオーバーラップすることを想像してください。

それらを新しいバイナリツリーにマージする必要があります。マージのルールは、2つのノードが重複する場合、ノードがマージされた後にそれらの値が新しい値として追加されることです。それ以外の場合、NULLでないノードは新しいバイナリツリーのノードとして直接使用されます。

2.例

入力:
  ツリー1ツリー2
       1 2
      / \ / \
    3 2 1 3
   / \ \
  5 4 7

出力:
マージされたツリー:
           3
         / \
       4 5
     / \ \
   5 4 7

3.分析

二分木の定義は再帰的に行われるため、それに対する操作も再帰的に行われます。

この例では、ツリー1のルートノード「1」とツリー2のルートノード「2」がマージされた後、マージされたツリーのルートノード「3」が取得されます。これは、ツリー1のルート「1」にツリー2のルートを加えたものです。 2 "。

次に、ツリー1のルートノード「1」の左側のサブツリーとツリー2のルートノード「2」の左側のサブツリーを
処理し、最後にツリー1のルートノード「1」とツリー2のルートノード「2」の右側のサブツリーを処理します。「正しいサブツリー。

ただし、2つのサブツリーのルートノードが空の場合は空を返します。
特定のサブツリーのノードが空の場合は、他のサブツリーの対応するノードを返します。
それ以外の場合は、ルートノードの値を変更する必要があります。追加、追加の結果をサブツリーに配置(または新しいツリーを作成)、左右のサブツリーで同じ処理を再帰的に実行します。

4.コード

/**
 * 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 && t2 == null)
            return null;
        // 若某棵子树的根节点为空,则返回不为空的根节点
        else if(t1 == null)
            return t2;
        else if(t2 == null)
            return t1;
        // 否则,两棵子树的根节点均不为空,则将值相加,放到 Tree 1 树中
        //递归地对左子树和右子树进行同样的处理
        else
        {
    
    
            t1.val += t2.val;
            t1.left = mergeTrees(t1.left, t2.left);
            t1.right = mergeTrees(t1.right, t2.right);
        }
        return t1;
    }
}

5.検証

ここに画像の説明を挿入

6.ソース

  1. LeeCode617。バイナリツリーのマージ
    ソース:LeetCode
    リンク:https ://leetcode-cn.com/problems/merge-two-binary-trees
    著作権はLeetCode Networkが所有してます。

おすすめ

転載: blog.csdn.net/PursueLuo/article/details/108746273