この記事では、バイナリツリーのすべてのパスを印刷するJavaメソッドについて説明します。次のように、参照のために共有してください。
質問:
バイナリツリーを与え、すべてのパスを印刷します。
たとえば、次のバイナリツリーの場合、そのすべてのパスは次のとおりです。
8-> 3-> 1
8-> 2-> 6-> 4
8-> 3-> 6-> 7
8-> 10-> 14-> 13
アイデア:
ルートノードから始めて、独自の値を配列に入れてから、この配列を子ノードに渡します。また、子ノードはこの配列に独自の値を配置し、このノードがリーフノードになるまで子ノードに渡し、配列を印刷します。したがって、ここで再帰を使用する必要があります。
コード:
/**バイナリツリーが与えられた場合、1行ごとに1つのルートからリーフスパスをすべて印刷します。再帰ヘルパーを使用して作業を行います。 printpaths(root、path、0);}/**再帰的なprintpathsヘルパー - ノードと、ルートノードからこのノードまでのパスを含む配列が与えられますが、すべてのルートリーフパスを含めません。 //このノードをパスアレイパス[pathlen ++] = node.valueに追加します。 //葉ですので、ここにつながったパスを印刷します(node.leftchild == null && node.rightchild == null){printArray(path、pathlen); } else {//それ以外の場合は、両方のsubtrees printpaths(node.leftchild、path、pathlen)を試してください。 printpaths(node.rightchild、path、pathlen); }}/** 1つの行に配列から文字列を印刷するユーティリティ。 } system.out.println();}注:アレイ +値のみを使用して、必要なパスを印刷できます。 LinkedListなどのLinkedリスト構造を使用すると、機能しません。理由を分析する価値がありますが、非常に興味深いです。
Javaアルゴリズムの詳細については、このサイトに興味のある読者は、「Javaデータ構造とアルゴリズムのチュートリアル」、「Java操作DOMノードのヒントの要約」、「Javaファイルの要約およびディレクトリ操作のヒント」、「Java Cache操作のヒントの要約」というトピックを見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。