标签(空格分隔): 学习笔记
树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用。 二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(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; }新闻热点
疑难解答