二叉树、二叉排序树及其遍历 缺乏、安全感 2022-10-08 15:21 171阅读 0赞 ### 文章目录 ### * * 先序创建二叉树 * 二叉树的中序、后须、层次遍历 * 二叉排序树的建立 ## 先序创建二叉树 ## /*二叉链表存储结构*/ typedef struct BiTNode { TElemType data; struct BiTNode* lchid, * rchid; }BiTNode,*BiTree; /*先序创建二叉树*/ BiTree CreateBiTree(){ BiTree T;//根节点 TElemType item; cin >> item; if (item == '#') { //叶节点数据标志 T = NULL; //若某一节点为叶子节点,则其左右子树均为NULL,0表示建空树 } else { T = (BiTree)malloc(sizeof(BiTNode)); T->data = item; T->lchid = CreateBiTree(); T->rchid = CreateBiTree(); } return T; } ## 二叉树的中序、后须、层次遍历 ## /*非递归中序遍历*/ void InOrderTraverse(BiTree t) { SqStack S; InitStack(S); BiTree p = t; while (p||!StackEmpty(S)) { if (p) { Push(S, (SElemType)p); p = p->lchid; } else { Pop(S, (SElemType&)p); cout << p->data; p = p->rchid; } } } /*递归后序遍历*/ void PostOrder(BiTree t) { if (t) { PostOrder(t->lchid); PostOrder(t->rchid); cout << t->data; } } /*递归层序遍历*/ void LevelOrder(BiTree t) { if (t) { LinkQueue Q; InitQueue(Q); //设置一空队列 EnQueue(Q, (int)t); //根结点入队 while (!QueueEmpty(Q)) //当队非空时重复执行下列操作 { DeQueue(Q, (int&)t); // Visit(p->data); //出队访问 cout << t->data; if (t->lchid) { EnQueue(Q, (QElemType)t->lchid); } if (t->rchid) { EnQueue(Q, (QElemType)t->rchid); } } DestoryQueue(Q); } } ## 二叉排序树的建立 ## /*二叉链表存储结构*/ typedef struct BiTNode { int data; struct BiTNode* lchild, * rchild; }BiTNode, * BiTree; int SearchBST(BiTree T, int key, BiTree f, BiTree& p) //查找成功,参数p指向查找到的结点,f指向它的双亲;否则p指向key应插入的父结点或指向空(当T为空时) { if (!T) { p = f; return 0; } else if (key == T->data) { p = T; return 1; } else if (key < T->data) return (SearchBST(T->lchild, key, T, p)); else return (SearchBST(T->rchild, key, T, p)); } int InsertBST(BiTree& T, int e) //在二叉排序树中插入值为elem的元素,T指向二叉排序树根结点 { BiTree p = NULL, f = NULL; if (!SearchBST(T, e, f, p)) // 如果查找不成功 { BiTree s = (BiTree)malloc(sizeof(BiTNode)); s->data = e; s->lchild = s->rchild = NULL; if (!p) // 若二叉树为空被插结点作为树的根结点 T = s; else if (e< p->data) //被插结点插入到p的左子树中 p->lchild = s; else //被插结点插入到p的右子树中 p->rchild = s; return 1; } else // 查找成功,不插 return 0; }
相关 二叉树,二叉树遍历,二叉树搜索 树形结构 树形结构应该就比较容易理解了,树是二维数据结构中的一种,至于说二叉树又是树的一种了。 树和图的区别在这里说明一下,重点: 树形结构为二维数据结构中的一种特 向右看齐/ 2023年07月07日 12:30/ 0 赞/ 14 阅读
相关 二叉树 二叉树遍历 通过二叉树遍历求得二叉树 什么是二叉树 > > 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且 偏执的太偏执、/ 2022年12月04日 01:08/ 0 赞/ 285 阅读
相关 二叉树、二叉排序树及其遍历 文章目录 先序创建二叉树 二叉树的中序、后须、层次遍历 二叉排序树的建立 先序创建二叉树 /二叉链表存储结构/ 缺乏、安全感/ 2022年10月08日 15:21/ 0 赞/ 172 阅读
相关 遍历二叉树 1. 二叉树的遍历 遍历定义 ——顺着某一条搜索路径巡访二叉树中的结点,使得 每个结点均被访问一次,而且仅被访问一次。 “访问”的含义可以很广,如:输出结点的信息等。 迈不过友情╰/ 2022年08月22日 14:26/ 0 赞/ 419 阅读
相关 遍历二叉树 遍历二叉树 二叉树是由3个基本单元组成的:根结点、左子树和右子树。 若限定先左后右的顺序,则遍历二叉树只有三种情况分别称为先(根)序遍历、中(根)序遍历和后(根)序遍 比眉伴天荒/ 2022年06月08日 00:48/ 0 赞/ 278 阅读
相关 遍历二叉树 遍历二叉树 今天我们学习了二叉树,现在我就基于二叉树的递归定义来说一说遍历二叉树的三种方法:先序、中序和后序。 根据二叉树的递归定义可知,二叉树是由3个基本单元组成:根结点 傷城~/ 2022年06月05日 08:11/ 0 赞/ 332 阅读
相关 二叉树遍历 include<iostream> include<queue> using namespace std; //二叉树结点 ╰+攻爆jí腚メ/ 2022年06月04日 05:35/ 0 赞/ 275 阅读
相关 二叉树遍历 前序遍历(左中右)ABDGHCEIF ![前序遍历][70] 中序遍历(左根右)GDHBAEICF![中序遍历][70 1] 后序遍历(左右根)GHDBIEFCA![ Bertha 。/ 2022年05月11日 13:48/ 0 赞/ 341 阅读
相关 二叉树遍历 二叉树是数据结构中很重要的一个章节,很多同学反应很难,今天我就把我平时的经验给大家讲解一下,今天讲一下二叉树的遍历 工具/原料 ● 数据结构知识 ● 了解树的定义 爱被打了一巴掌/ 2022年05月10日 03:08/ 0 赞/ 299 阅读
还没有评论,来说两句吧...