標簽(空格分隔): 學習筆記
樹形結構是一類重要的非線性數據結構,其中以樹和二叉樹最為常用。 二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用作二叉查找樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹(不存在度大于2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2的 i -1次方個結點;深度為k的二叉樹至多有
采用遞歸的方法前序(根左右)建立二叉樹,以#符號表示此當前數值為空。
TreeNode* CreateBiTree(){ char ch; TreeNode* T; scanf_s("%c", &ch); if (ch == '#') { T = NULL; } else { T = (TreeNode*)malloc(sizeof(TreeNode)); T->val = ch; T->left = CreateBiTree(); T->right = CreateBiTree(); } return T;//返回根節點}測試圖像:
測試結果: 
序是根據樹根的遍歷位置來說的,前序就是先遍歷根,后遍歷左右子節點 比如這樣的樹 A / / B C 根是A,前序遍歷就是ABC,中序就是BAC,后序就是BCA,根據A的位置決定
采用層次遍歷的方式遞歸遍歷二叉樹的所有元素;
void levelTraverse(TreeNode* T) { vector<TreeNode*> vec; vec.push_back(T); int cur = 0; int end = 1; while (cur < vec.size()) { end = vec.size(); while (cur < end) { cout << vec[cur]->data << " "; if (vec[cur]->lchild) vec.push_back(vec[cur]->lchild); if (vec[cur]->rchild) vec.push_back(vec[cur]->rchild); cur++; } cout << endl; } }運行結果如下圖所示: 
給定一個二叉樹,其最大深度指的是根節點到所有葉子節點中的最大距離。同樣采用遞歸的方式遍歷二叉樹,沒遍歷一次,計數器+1;
int maxDepth(TreeNode *root) { // write your code here if(root == NULL) { return 0; } int max_left=1; int max_right=1; if(root->left != NULL) { max_left = maxDepth(root->left) + 1; } if(root->right != NULL) { max_right = maxDepth(root->right) + 1; } return max_left>max_right?max_left:max_right; }新聞熱點
疑難解答