数据结构之——二叉树(2)

一:二叉树的建立

1:二叉链表的结点结构定义代码

// 二叉树的二叉链表结点结构定义
typedef struct BitNode
{
   
	TElemType data;		// 结点数据
	struct BitNode *lchild, *rchild // 左右孩子指针
} BitNode, *BiTree;

2:二叉树的建立的代码部分

// 按前序遍历输入二叉树中结点的值(一个字符)
// 若输入‘#’,则表示空树,构造二叉链表表示二叉树 T
void CreatBiTree(BiTree T)
{
   
	TElemType ch;
	scanf("%c", &ch);
	if(ch == 'c'){
   
		T = NULL;
	}	
	else{
   
		T = (BiTree)malloc(sizeof(BiTnode));
		if(T == NULL){
   	//出现这种情况则是内存已满,无空间可分配
			exit(OVERFLOW);
		}
		T->data = ch;	//生成根节点
		CreatBiTree(T->lchild);	//构造左子树
		CreatBiTree(T->rchild);	//构造右子树
	}
}
//其实树节点的建立构成是函数的递归过程。

二:线索二叉树

1:线索二叉树原理

没有引用线索二叉树原理之前:
	对于一个有 n 个结点的二叉链表,每个结点都有指向左右孩子的两个指针域,所
以一共是 2n 个指针域。而 n 个结点的二叉树一共有 n-1 条分支线,所以,这种情
况下其实是存在 2n-(n-1)=n+1 个空指针域的。这些空间不存储任何事物,白白的浪
费内存的资源。

引用后:
	假如我们对一个二叉树进行中序遍历得到了HDIBJEAFCG这样的字符序列,遍历
过后,我们可以知道,结点 I 的前是 D ,后继是B,结点 F 的前驱是 A ,后继是
C。也就是说,我们可以很清楚的知道任意一个结点,它的前驱和后继是哪一个。我
们把这种指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应
的二叉树就称为线索二叉树。

2:线索二叉树的结点结构

typedef enum {
   Link, Thread} PointerTag;
// link
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值