タグ付けされた質問 「binary-tree」

各ノードが最大2つの子ノードを持つツリーデータ構造。




30
バイナリツリーで2つのノードの最も低い共通祖先を見つける方法は?
ここでのバイナリツリーは、必ずしもバイナリ検索ツリーであるとは限りません。 構造は次のように解釈できます- struct node { int data; struct node *left; struct node *right; }; 友人と一緒に解決できる最大の解決策は、このようなものでした- この二分木を 考えてみましょう: 順序トラバーサルの利回り-8、4、9、2、5、1、6、3、7 そして、ポストオーダートラバーサルイールド-8、9、4、5、2、6、7、3、1 したがって、たとえば、ノード8と5の共通の祖先を見つけたい場合は、順序木走査で8と5の間のすべてのノードのリストを作成します。この場合、[4、9 、2]。次に、このリストのどのノードがポストオーダートラバーサルの最後に表示されるか(2)を確認します。したがって、8と5の共通の祖先は2です。 このアルゴリズムの複雑さは、O(n)(インオーダー/ポストオーダートラバーサルではO(n)、残りのステップは配列の単純な反復にすぎないため、残りのステップもO(n)である)と私は信じています。しかし、これが間違っている可能性が高いです。:-) しかし、これは非常に大雑把なアプローチであり、いくつかのケースで失敗するかどうかはわかりません。この問題に対する他の(おそらくより最適な)解決策はありますか?


28
二分木図を印刷する方法は?
出力が次のようになるようにJavaでバイナリツリーを印刷するにはどうすればよいですか? 4 / \ 2 5 私のノード: public class Node<A extends Comparable> { Node<A> left, right; A data; public Node(A data){ this.data = data; } }

12
バイナリサーチツリーの定義で重複キーは許可されていますか?
私は二分探索木の定義を見つけようとしています、そして私は至る所で異なる定義を見つけ続けています。 特定のサブツリーで、左の子キーはルート以下であると言う人もいます。 特定のサブツリーについて、正しい子キーはルート以上であると言う人もいます。 そして、私の古い大学のデータ構造の本は、「すべての要素にキーがあり、2つの要素が同じキーを持つことはない」と述べています。 bstの普遍的な定義はありますか?特に、同じキーの複数のインスタンスを持つツリーをどうするかに関して。 編集:多分私は不明瞭だったかもしれません、私が見ている定義は 1)左<=ルート<右 2)左<ルート<=右 3)左<ルート<右。重複するキーは存在しません。

8
スタックや再帰を使用せずにモリスの順序木探索を説明する
誰かが、スタックや再帰を使用せずに、次のモリス順序木探索アルゴリズムを理解するのを手伝ってくれませんか?私はそれがどのように機能するかを理解しようとしていましたが、それはちょうど私をエスケープしました。 1. Initialize current as root 2. While current is not NULL If current does not have left child a. Print current’s data b. Go to the right, i.e., current = current->right Else a. In current's left subtree, make current the right child of the rightmost node b. Go to …

27
二分木がバランスしているかどうかを判断するにはどうすればよいですか?
あの学校時代から久しぶりですね。病院でITスペシャリストとして仕事を得ました。今実際のプログラミングをするために移動しようとしています。現在、バイナリツリーに取り組んでおり、ツリーが高さのバランスが取れているかどうかを判断する最良の方法は何だろうと思っていました。 私はこれに沿って何かを考えていました: public boolean isBalanced(Node root){ if(root==null){ return true; //tree is empty } else{ int lh = root.left.height(); int rh = root.right.height(); if(lh - rh > 1 || rh - lh > 1){ return false; } } return true; } これは良い実装ですか?または私は何かを逃していますか?

30
最適な方法で二分探索木のk番目に小さい要素を見つける
静的/グローバル変数を使用せずに、バイナリ検索ツリーでk番目に小さい要素を見つける必要があります。それを効率的に達成する方法は?私が心に留めている解決策は、O(n)で操作を実行することです。これは、ツリー全体を順不同に走査することを計画しているため、最悪のケースです。しかし、ここのBSTプロパティは使用していないようです。私の仮定の解決策は正しいですか、それともより良い解決策がありますか?


5
Preorder、Postorder、Inorder Binary Search Tree Traversal戦略を使用する場合
私は最近、BSTを十分に活用している一方で、インオーダートラバーサル以外を使用することさえ考えたことがないことに気付きました(プログラムを前後のトラバーサルに使用するのがいかに簡単であるかを知っており、知っています)。 これに気づいたとき、私は私の古いデータ構造の教科書の一部を引き出して、予約注文と注文注文の走査の有用性の背後にある理由を探しました-彼らは多くのことを言いませんでした。 プレオーダー/ポストオーダーを実際に使用する場合の例は何ですか?順序より意味があるのはいつですか?

7
Big O(logn)ログベースはeですか?
バイナリサーチツリータイプのデータ構造の場合、Big O表記は通常O(logn)と表記されます。ログに小文字の 'l'がある場合、これは自然対数で記述されているようにログベースe(n)を意味しますか?簡単な質問で申し訳ありませんが、暗黙の対数を区別するのにいつも問題がありました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.