学生ID 20182317 2019-2020-1「オブジェクト指向プログラミングとデータ構造、」第十週ラーニングの概要
コンテンツ概要を学びます
一般的に使用される3つの探索アルゴリズム(逐次探索検索、バイナリ検索、バイナリ・ソートツリーが見つけるために)
ツリー
ツリーの基本的な性質:
- ノード:他のノードにデータ項目および分岐ポインタが含まれています
- ノードの:ノードは、サブツリーの木を持っています。
- &リーフノード終端ノード:即ち度ノード0
- 非終端ノード・ブランチノード:他のノードのリーフノードに加えて
- 子ノード:ノードのサブツリーを持つX場合、サブツリーのルートは、点xの子ノードです。
- 親ノード:ノードが子を持つXなら、それは子供の親ノードであります
- ルート:親ノードがルートノードと呼ばれていません
- 兄弟:お互いと呼ばれる兄弟の同じ親ノードの子。
- 樹高は:葉ノードの高さは、非リーフノードの高さは、その最大の子ノードの高さプラス1に等しいです。木の高さは4です
ツリー度:ツリーノードの最大のポイント。
ツリーのトラバース
- 先行順走査:ルートから開始し、子供たちには、各ノードを訪問します。
- 予約限定:、ルート・ノードから開始したアクセスノードは、その後、子供を残し、その後、任意の残りのノード。
- 後順:ルートノード、アクセスノードの子、そのノードから開始します。
- トラバース配列:各レイヤー、一度に一つのすべてのアクセスノードに、ルートノードから始まります。
シーケンス内の先行予約+、+、または一意のバイナリツリーを識別することができる配列の後に配列が、順番は必ずしも一意にバイナリツリーを判定されなかった後に+一次。
上記のように、次のように、ツリートラバーサル順序の異なるトラバーサルを順次ノード。
-
- 予約限定:ABDEHIKCFGJ
-
- 予約限定:DBHEKIAFCGJ
-
- 後順:DHKIEBFJGCA
バイナリーツリー(二分木)
任意の順序を逆にすることができない(すなわち、2よりも大きなバイナリツリーノードの不存在下で)最ものみ二つのサブ木における各ノードによって特徴付けられる別のツリー構造、バイナリポイントの左と右のサブツリーは、あります。
同様の再帰的定義ツリー、バイナリツリー次のように再帰的に定義:バイナリツリーまたはルートノードと2つの互いに素の空または構成さは、サブツリーを左及び根の右サブツリーが呼び出されサブツリーからなる非空の木。
- 上の定義から理解できるように、バイナリツリーの各ノードの子の数は、0,1又は2であることができ、それぞれの子は点について有しています。左側には子供が子供、右の子のように、右側の子を残し呼ばれ、子供が根付い左サブツリーにある右部分木と呼ばれる右の子サブツリーをルートと左部分木と呼ばれます。
バイナリツリーの構築:
public List<TreeNode> createTree(){
int[] array = {1,2,3,4,5,6,7,8,9};
List<TreeNode> nodeList = new ArrayList<>();
for (int nodeIndex = 0; nodeIndex < array.length;nodeIndex++){
nodeList.add(new TreeNode(array[nodeIndex]));
}
//对LastParentIndex-1个父节点按照父节点和子节点的关系建立二叉树
for (int parentIndex = 0; parentIndex < array.length/2-1;parentIndex++){
//左孩子
nodeList.get(parentIndex).left = nodeList.get(parentIndex * 2 +1);
//右孩子
nodeList.get(parentIndex).right = nodeList.get(parentIndex * 2 +2);
}
//最后一个父节点,可能存在没有右孩子的情况,所以拿出来单独处理
int lastParentIndex = array.length/2-1;
//左孩子
nodeList.get(lastParentIndex).left = nodeList.get(lastParentIndex * 2 + 1);
//右孩子,如果长度为奇数则建立右孩子
if(array.length % 2 == 1){
nodeList.get(lastParentIndex).right = nodeList.get(lastParentIndex * 2 + 2);
}
return nodeList;
}
教科書の学習と問題解決プロセス
- 質問1:関係と完全なバイナリツリーの完全なバイナリツリー
質問1つのソリューション:完全なバイナリツリーは完全なバイナリツリーで、リードアウト。深さがKである、というバイナリツリーがそれぞれ1からnまで次Kバイナリツリーのノード番号の完全な深さであるの節場合にのみ、n個のノードのバイナリツリーがあります。
完全なバイナリツリーの場合は、任意の子ノードのない最後の1を除いて、各レイヤー上のすべてのノードは、バイナリツリーの2つのノードを持っています。完全2分木は非常に効率的なデータ構造で、完全なバイナリツリーは完全なバイナリツリーで、リードアウト。深さがKである、というバイナリツリーがそれぞれ1からnまで次Kバイナリツリーのノード番号の完全な深さであるの節場合にのみ、n個のノードのバイナリツリーがあります。
- 質問2:他の検索方法の優位性に関して、バイナリツリーの検索方法
問題解決策2:ツリー・データ構造は、多くの場合、木は高くないソートの時間複雑に関連付けられた短い木(非線形、平均実行時間に対するデータ構造の線形項(リンクされたリスト、配列)であります)
プロセスでのコードのデバッグおよび問題解決
質問1:教科書BTNODEクラスとLinkedBinaryTree ArrayIteratorクラスに関連したコードの一部は、クラスを呼び出すことはできません。
問題1ソリューション:プログラムの実現を作り、それ自身のクラスを書きます
ホスティングコード
(実行結果はstatistics.shスクリプトをスクリーンショット)
先週試験間違った質問の概要
- 分析:あなたは、スタック上のポップメソッドを呼び出した場合、システムはエラーをスローします
- 分析:キューから要素を削除するデキュー方法
- 分析:FIFOキューは、アナログサービスのための理想的な選択です
ペアピアレビューと
採点
- 14ポイント:スコアに基づいて、私はこのブログの得点を与えます。次のようにスコアは以下のとおりです。
適切に使用するマークダウン構文(1点):
値下げに余分なポイントを使用しないでください
構文エラーが(リンクは仕事は、形成しないしない、リストが正しくありません...)プラスではありません
混乱を組版することはプラスではありません
- 要素の範囲(1点)テンプレート
- ポイントなしで「教科書の学習と問題解決のプロセスを」行方不明
- ポイントなし「のプロセスにコードを解決し、デバッグ問題」の欠如
- マネージコードは、ポイントなしで開くことができません
- 行方不明「双晶と相互評価」のポイントなしで開くことができません。
- 「先週は間違ったタイトルの検査をまとめた」欠落してプラスすることはできません
- 「プログレスバー」の欠如がプラスすることはできません
- 「参照」の欠如はプラスすることはできません
教科書の学習と問題解決のプロセス、問題1ポイント
代码调试中的问题和解决过程, 一个问题加1分
- 本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
- 其他加分:
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
点评过的同学博客和代码
- 本周结对学习情况
- 对队列的一些讨论和学习。包括链表和数组实现队列,入队、出队等等
- 上周博客互评情况
经过本周的学习,我对曾经学过的知识有了更深一步的了解同时对数据查找和排序等方法的应用也更加熟悉,同时也弄懂了一些过去不是很懂的知识点可谓是受益匪浅。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 126/126 | 2/2 | 20/20 | |
第二周 | 0/126 | 2/2 | 20/40 | |
第三周 | 353/479 | 2/6 | 20/60 | |
第四周 | 1760/2239 | 2/8 | 30/90 | |
第五周 | 1366/3615 | 2/10 | 20/110 | |
第六周 | 534/4149 | 2/12 | 20/130 | |
第七周 | 2800/6949 | 2/12 | 20/150 | |
第八周 | 883/7832 | 2/14 | 20/170 | |
第九周 | 2550/10382 | 2/126 | 20/190 |