1. 程式人生 > 遊戲 >育碧要重返Steam?Connect客戶端已新增到Steam預設包中

育碧要重返Steam?Connect客戶端已新增到Steam預設包中

1. 概念

樹是連通的無環圖,最常利用的有二叉樹,即一個節點最多隻有兩個子節點,稱為左子樹和右子樹。但是樹都是相通的,無論是二叉樹或者多個節點的樹都能一般能用遞迴方法進行求解。二叉樹節點之間的順序一般不可調換,在資料結構定義時,左是左,右是右,不會說節點1,節點2。

二叉排序樹又叫二叉查詢樹或者二叉搜尋樹:

1)若左子樹不空,則左子樹上所有結點的值均小於它的根節點的值;

2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;

3)左、右子樹也分別為二叉排序樹;4)沒有鍵值相等的節點

2. 樹的各種遍歷

前序遍歷,根-->左子樹-->右子樹

中序遍歷,左子樹-->根-->右子樹

後序遍歷,左子樹-->右子樹-->根

前序/後序+中序能夠確定一個完整的樹結構,因為前序/後序的根在第一位/最後一位,這樣在中序中找到對應的根節點,以此遞迴,具體的題見leetCode105、106

廣度優先遍歷(Breadth FirstSearch,BFS,實際上就是逐層查詢,又叫層次遍歷,寬度優先搜尋或橫向優先搜尋)

 1 class Solution {
 2 public:
 3     vector<vector<int>> levelOrder(TreeNode* root) {
 4         queue<TreeNode*> que;
5 if (root != NULL) que.push(root); 6 vector<vector<int>> result; 7 while (!que.empty()) { 8 int size = que.size(); 9 vector<int> vec; 10 // 這裡一定要使用固定大小size,不要使用que.size(),因為que.size是不斷變化的 11 for (int i = 0; i < size; i++) {
12 TreeNode* node = que.front(); 13 que.pop(); 14 vec.push_back(node->val); 15 if (node->left) que.push(node->left); 16 if (node->right) que.push(node->right); 17 } 18 result.push_back(vec); 19 } 20 return result; 21 } 22 };

深度優先遍歷(Depth First Search,DFS,主要有三種子方法,前中後序遍歷)

前中後序遍歷的遞迴寫法

 1 class Solution {
 2 public:
 3     //前序遍歷:
 4     void traversal(TreeNode* cur, vector<int>& vec) {
 5         if (cur == NULL) return;
 6         vec.push_back(cur->val);    //
 7         traversal(cur->left, vec);  //
 8         traversal(cur->right, vec); //
 9     }
10     vector<int> preorderTraversal(TreeNode* root) {
11         vector<int> result;
12         traversal(root, result);
13         return result;
14     }
15 };
16 //中序遍歷:
17 void traversal(TreeNode* cur, vector<int>& vec) {
18     if (cur == NULL) return;
19     traversal(cur->left, vec);  //
20     vec.push_back(cur->val);    //
21     traversal(cur->right, vec); //
22 }
23 //後序遍歷:
24 void traversal(TreeNode* cur, vector<int>& vec) {
25     if (cur == NULL) return;
26     traversal(cur->left, vec);  //
27     traversal(cur->right, vec); //
28     vec.push_back(cur->val);    //
29 }