【leetcode] 1379。その木のクローンにバイナリツリーの対応するノードを探します

【leetcode] 1379。その木のクローンにバイナリツリーの対応するノードを探します

リンク

leetcode

説明

  元の2つのバイナリツリーを与えられ、クローン化され、元のツリー内のノードのターゲットへの参照を与えられます。

  クローン化された木は、元のツリーのコピーです。

  クローン化されたツリー内の同じノードへの参照を返します。

  あなたは2つのツリーまたはターゲット・ノードのいずれかを変更することが許可されていないと答えはクローン化されたツリー内のノードへの参照でなければならないことに注意してください。

フォローアップ:木の上繰り返される値が許可されている場合は、問題を解決します。

例1:
IMG

入力:木= [7,4,3、NULL、NULL、6,19]、目標= 3
出力:3
  説明:全ての実施例では、元とクローン化された木が示されています。ターゲットノードは、元のツリーからの緑色のノードです。答えは、クローン化されたツリーから黄色のノードです。
例2:
IMG

入力:木= [7]、目標= 7
出力:7
例3:
IMG

入力:木= 8、ヌル、6、ヌル、5、ヌル、4、ヌル、3、NULL、2、NULL、1]、目標= 4
出力:4
例4:
IMG

入力:木= [1,2,3,4,5,6,7,8,9,10]、目標= 5
出力:5
例5:
IMG

入力:木= [1,2、NULL、3]、目標= 2
出力:2

制約:

ツリー内のノードの数は、範囲[1、10 ^ 4]です。
ツリーのノードの値は一意です。
ターゲット・ノードは、元のツリーからノードであり、nullではありません。

解決

  最も簡単なBFS(幅優先トラバーサル)を使用するとことができます。

class Solution {
public:
	TreeNode* getTargetCopy(TreeNode* original, TreeNode* cloned, TreeNode* target) {
		queue<TreeNode*> oq, cq;
		if (original == NULL)
			return NULL;
		oq.push(original);
		cq.push(cloned);

		while (!oq.empty())
		{
			TreeNode *tmp = oq.front();
			TreeNode *tmpC = cq.front();

			oq.pop();
			cq.pop();

			if (tmp == target)
				return tmpC;

			if (tmp->left)
			{
				oq.push(tmp->left);
				cq.push(tmpC->left);
			}

			if (tmp->right)
			{
				oq.push(tmp->right);
				cq.push(tmpC->right);
			}
		}
		return NULL;
	}
};

分析

  O(N)の時間計算量は、nは、バイナリツリー内のノードの数は、ツリーの各ノードは一度だけ横断され、
  Oの空間複雑度(1)

CLIK私githubの
パーソナルページ

おすすめ

転載: www.cnblogs.com/qwfand/p/12568547.html