电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

中序线索化二叉树数据结构VIP专享VIP免费

中序线索化二叉树数据结构_第1页
中序线索化二叉树数据结构_第2页
中序线索化二叉树数据结构_第3页
中序线索化二叉树数据结构. 当用二叉链表作为二叉树的存储结构时,因为每个结点中只有指向其左、右孩子结点的指针,所以从任一结点出发只能直接找到该结点的左、右孩子。在一般情况下靠它无法直接找到该结点在某种遍历次序下的前驱和后继结点。如果在每个结点中增加指向其前驱和后继结点的指针,将降低存储空间的效率。 与此同时,我们可以证明:在 n 个结点的二叉链表中含有n+1 个空指针。因为含 n 个结点的二叉链表中含有2n 个指针,除了根结点,每个结点都有一个从父结点指向该结点的指针,因此一共使用了 n-1 个指针,所以在 n 个结点的二叉链表中含有2n-(n-1)=n+1 个空指针。 因此,可以利用这些空指针,存放指向结点在某种遍历次序下的前驱和后继结点的指针。这种附加的指针称为线索,加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。为了区分一个结点的指针是指向其孩子的指针,还是指向其前驱或后继结点的线索,可在每个结点中增加两个线索标志。这样,线索二叉树结点类型定义为: Lchild Ltag Data Rtag Rchild 其中: 1. Ltag=0 时,表示 Lchild 指向该结点的左孩子; 2. Ltag=1 时,表示 Lchild 指向该结点的线性前驱结点; 3. Rtag=0 时,表示 Rchild 指向该结点的右孩子; 4. Rtag=1 时,表示 Rchild 指向该结点的线性后继结点; 以二叉链表结点数据结构所构成的二叉链表作为二叉树的存储结构,叫做线索二叉链表;指向结点的线性前驱或者线性后继结点的指针叫做线索;加上线索的二叉树称为线索二叉树;对二叉树以某种次序遍历将其变为线索二叉树的过程叫做线索化。 中序线索化是指用二叉链表结点数据结构建立二叉树的二叉链表,然后按照中序遍历的方法访问结点时建立线索。 例如有如上图所示二叉树,则中序遍历的顺序是:O / J * I + H A G 【参考程序】 #include #include typedef enum{Link,Thread} PointerTag; /*指针标志*/ typedef char DataType; typedef struct BiThreTree{ /*定义结点元素*/ PointerTag LTag,RTag; DataType data; struct BiThreTree *lchild,*rchild; }BiThreTree; BiThreTree *pre; /*全局变量,用于二叉树的线索化*/ BiThreTree *CreateTree() /*按前序输入建立二叉树*/ { BiThreTree *T; DataType ch; scanf("%c",&ch); if(ch==’#’) T=NULL; else {T=(BiThreTree ...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部