Upgrade to Pro — share decks privately, control downloads, hide ads and more …

師大資工系ACM-ICPC讀書會:肆、鏈結串列與二元樹

Cd57bf203d03722597a5c88007eb1c17?s=47 Maplewing
December 06, 2013

 師大資工系ACM-ICPC讀書會:肆、鏈結串列與二元樹

師大資工系ACM-ICPC讀書會:肆、鏈結串列與二元樹

Cd57bf203d03722597a5c88007eb1c17?s=128

Maplewing

December 06, 2013
Tweet

Transcript

  1. 肆、鏈結串列與二元樹 師大資工系 灆洢 取自於<提升程式設計的邏輯思考力> 6.2 & 6.3

  2. 鏈結串列

  3. struct node{ int value; node *next; }; 單向鏈結串列 Singly Linked

    List 22 12 32
  4. 插入新節點 22 12 32 5 node node.next newnode newnode.next =

    node.next; node.next = newnode;
  5. 刪除節點 22 12 32 node node.next node.next.next node *delnode =

    node.next; node.next = node.next.next; delete delnode;
  6. struct node{ int value; node *prev, *next; }; 雙向鏈結串列 Doubly

    Linked List 22 12 32
  7. • List containers are implemented as doubly-linked lists. C++ STL:

    list
  8. •127 •101 •133 •10152 •673 •442 作業 •11111 •11234 •540

    •10050
  9. 二元樹

  10. • 任兩點之間都相通,並且沒有環的圖。 • 來源:演算法筆記 樹 Tree

  11. 二元樹 Binary Tree

  12. • 陣列 • 以0為root • 往編號n之左子樹:2*(n+1) - 1 • 往編號n之右子樹:2*(n+1)

    • 往父節點:floor((n-1)/2) • 鏈結串列 • struct node { int data; node *left, *right; }; 儲存方式
  13. 需要用queue 廣度優先搜尋 BFS: Breadth-first search

  14. 深度優先搜尋 DFS: Depth-first search 需要用recursion或stack

  15. 樹的走訪:前序、中序、後序

  16. function Preorder(node){ if(!node.left && !node.right){ print(node.value); return; } print(node.value); Preorder(node.left);

    Preorder(node.right); } Ans: F,B,A,D,C,E,G,I,H 前序
  17. function Inorder(node){ if(!node.left && !node.right){ print(node.value); return; } Preorder(node.left); print(node.value);

    Preorder(node.right); } Ans: ABCDEFGHI 中序
  18. function Postorder(node){ if(!node.left && !node.right){ print(node.value); return; } Preorder(node.left); Preorder(node.right);

    print(node.value); } Ans: ACEDBHIGF 後序
  19. • 給予前序與中序,如何找出後序? • 前:DBACEGF 中:ABCDEFG • 後:ACBFGED 問題:二元樹重建

  20. 作業 •112 •548 •297 •712 •699 •327 •839 •10562

  21. 謝謝聆聽 資料取自於<提升程式設計的邏輯思考力> 6.2 & 6.3