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