バイナリツリーアルゴリズムの設計の一般的なラインは:はっきりノードは、フレームワークを投げ物事の残りの部分を行う必要があります。
無効トラバース(ツリーノードのルートを){ // ルートは何をしますか?これを行うには。 // 他の心配しないルート、スローフレーム トラバース(root.left); トラバース(root.right); }
ここで思考のこのラインは、ウォームアップを理解するには、2つの簡単な例があります。
1.どのようにバイナリツリー内のすべてのノードの値はプラス1?
無効プラスワン(ツリーノードのルート){ 場合(ルート== NULL)リターン; root.val + = 1 ; プラスワン(root.left)。 プラスワン(root.right)。 }
2.どのように正確にバイナリ2かどうかを判断するには?
ブールisSameTree(ROOT1ツリーノード、ツリーノードroot2){ //は、その後明らかに同じ空で、 IF(ROOT1 == NULL && root2 == NULL)リターン trueに; // ブランクは、空でない、明らかに異なる IF(= ROOT1 = nullの || root2 == nullを)返し 偽; // 両方の非空ではなく、同じでもヴァル IF(root1.val = root2.val)!返す 偽; // ROOT1とroot2の比率より以上の リターンisSameTree(root1.left、root2.left) && isSameTree(root1.right、root2.right)。 }