C/C++二叉树的插入及递归法实现前序遍历,中序遍历,后序遍历

时间: 2020-06-13 20:46
  1. 二叉树节点的定义
typedef struct btree_ {
	int data;		//节点中的数据域
	btree_* left;	//指向左子节点的指针
	btree_* right;	//指向右子节点的指针
}btree;
  1. 节点的插入
void insertBTree(btree** head, btree* node) {	//传入根节点指针和待插入节点指针
	if (!node) {	//若待插入节点为空指针, 则 return
		return;
	}

	node->left = NULL;	//将待插入节点的左右子节点置为空指针
	node->right = NULL;

	btree* p = *head;	//p指针用于遍历树节点
	btree* tmp = NULL;	//tmp指针用于指向待插入节点的父节点

	if (!(*head)) {	//若父节点为空, 则将待插入节点设为根节点
		*head = node;	
	}
	else {	//若父节点存在
		while (p) {	//遍历二叉树
			tmp = p;	//记录p节点的父节点
			if (node->data < p->data) {	//若小于根节点, 则往左子树遍历
				p = p->left;
			}
			else {
				p = p->right;	//若大于根节点, 则往右子树遍历
			}
		}

		if (node->data < tmp->data) {	//跳出while循环后判断新节点作为左子节点还是右子节点
			tmp->left = node;
		}
		else {
			tmp->right = node;
		}
	}
}
  1. 递归–前序遍历
void bl(btree* head) {	//传入根节点指针
	if (!head) {	//若为空指针则 return
		return;
	}

	printf("%d  ", head->data);
	bl(head->left);
	bl(head->right);
}
  1. 递归–中序遍历
void bl(btree* head) {
	if (!head) {
		return;
	}

	//printf("%d  ", head->data);
	bl(head->left);
	printf("%d  ", head->data);
	bl(head->right);
}
  1. 递归–后序遍历
void bl(btree* head) {
	if (!head) {
		return;
	}

	//printf("%d  ", head->data);
	bl(head->left);
	//printf("%d  ", head->data);
	bl(head->right);
	printf("%d  ", head->data);
}
  1. 总结: 采用递归法进行前序遍历, 中序遍历, 后序遍历时, 只需要调换 printf 的位置即可达到相应的遍历效果.
  2. #########################################
  3. (1) 递归法在第一次遍历到达该位置时打印便是前序遍历,
    (2) 在第二次到达该位置时打印便是中序遍历,
    (3)在第三次到达该位置时打印便是后续遍历.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值