LeetCode1379。複製されたバイナリツリーで同じノードを検索します(バイナリツリートラバーサル)。

1.タイトル

元のツリーの元のツリーとクローンされたツリー、および元のツリーの元にあるターゲットノードターゲットという2つのバイナリツリーが表示されます。

その中で、複製された複製ツリーは元のツリーのコピーです。

クローンされたツリーでターゲットと同じノードを見つけて、ノードへの参照を返します(C / C ++およびその他のポインター付き言語では、ノードポインターを返し、その他の言語ではノード自体を返します)。

注意:
你 不能 对两棵二叉树,以及 target 节点进行更改。
只能 返回对克隆树 cloned 中已有的节点的引用。
进阶:如果树中允许出现值相同的节点,你将如何解答?

ソース:LeetCode
リンク:https ://leetcode-cn.com/problems/find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree
copyright首輪ネットワークすべて。商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。

2.問題解決

  • サイクリックモードでのバイナリツリートラバーサル。2つのツリーを同期できます。
class Solution {
public:
    TreeNode* getTargetCopy(TreeNode* original, TreeNode* cloned, TreeNode* target) {
        stack<TreeNode*> stk1, stk2;
        TreeNode *tp1, *tp2;
        while(original || !stk1.empty())
        {
        	while(original)
        	{
        		stk1.push(original);
        		original = original->left;
        	}
        	while(cloned)
        	{
        		stk2.push(cloned);
        		cloned = cloned->left;
        	}
        	tp1 = stk1.top();
        	tp2 = stk2.top();
        	stk1.pop();
        	stk2.pop();
        	if(tp1 == target)
        		return tp2;
        	original = tp1->right;
        	cloned = tp2->right;
        }
        return NULL;
    }
};

872 ms 164.6 MB

元の記事839件を公開 2083 年に賞賛 44万回の閲覧+

おすすめ

転載: blog.csdn.net/qq_21201267/article/details/105479474