オファーを証明安全[] []バイナリツリーとパス値

タイトル:入力整数バイナリツリーのルートノード、入力経路内のノードのバイナリプリント値及び全ての整数。パス定義のパスを形成することにより、ダウンリーフノードへのツリーのルート・ノードから始まるノードを横断してきました。(注:リスト内の戻り値、大きいアレイアレイフロント)

 

A:前順走査として、順序トラバーサルを選択する前に、ルートノードにアクセスするには

  値はパスを見つけるために0に減少し、listAllの記入された場合に再帰表裏から選ば、各値は、リーフノードトラバーサルまで、現在のノードを差し引い

  現在はリーフノードではなく、残りの値がまだゼロではない場合は、再帰呼び出しは、ノードのサブツリーを残し、その後、再帰的にツリーの右側の子ノードを起動します

  満たされていない場合は、削除されたノード

/ * 
構造体のTreeNode { 
	int型のval; 
	構造体のTreeNode *左; 
	構造体のTreeNode *右; 
	ツリーノード(int型X):
			ヴァル(x)は、左(NULL)、右(NULL){ 
	} 
}; * / 
クラスのソリューション{ 
プライベート:
    ベクトル<ベクトル<整数>> listAllの。
    ベクトル<整数>リスト。
    ifFindを無効(TreeNodeの*ノード、INT左)
    { 
        //存入路径リスト
        list.push_back(ノードレベル> val)で、
        
        //是否是叶子节点、且路径和一致
        する場合((左-ノード- >ヴァル== 0)&&(ノード- >左== nullptr)&&(ノード- >右== nullptr))
        { 
            listAll.push_back(リスト); // {10,5,7} ==> {10,12} 
        } 
        { 
            IF(ノード- >左)
            { 
                ifFind(ノード- >左、左-ノード- >ヴァル)
            } 
            IF(ノード- >右)
            { 
                ifFind(ノード- >右は、左-ノード- >ヴァル)
            } 
        } 
        list.pop_back()。// {10,5,4} =>トゥーレ=>真
    } 
公共:
    ベクトル<ベクトル<整数>> FindPath(ツリーノード*根、INT expectNumber)
    { 
        // {10,5,4,7,12} 
        (IFルート= nullptr)!
        { 
            ifFind(根、expectNumber)。
        } 
        listAllのを返します。
    } 
}。

  

 

おすすめ

転載: www.cnblogs.com/xiexinbei0318/p/11432876.html