(c语言)基于先序遍历输出叶结点(包含测试源码)

本实验取材于浙江大学《数据结构》。
输出二叉树中的叶子结点与输出二叉树中的结点相比,它是一个有条件的输出问题。唯一的区别就是执行“访问结点”的时候,先对该结点进行检测,看它是否是叶子结点,也就是看它左右子树是否都为空.所以只要在二叉树的遍历算法中增加检测条件就可以了。

//叶节点输出
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//树的层序遍历--采用队列模型
//设置一个队列结构,遍历从根节点开始,首先将根节点指针入队,然后开始执行下面三个操作:
//1、从队列中取出一个元素;
//2、访问该元素所指结点;
//3、若该元素所指结点的左右孩子结点非空,则将其左、右孩子的指针顺序入队
//不断执行这三部操作,直到队列为空,再无元素可取,二叉树的程序遍历就完成了。
#define ERROR -1
#define MaxSizel 10
//typedef struct SNode *PtrToSNode;
typedef int ElementType;
typedef struct TNode *Position;
typedef Position BinTree; /* 二叉树类型 */
struct TNode{ /* 树结点定义 */
    ElementType Data; /* 结点数据 */
    BinTree Left;     /* 指向左子树 */
    BinTree Right;    /* 指向右子树 */
};

void PreorderPrintLeaves(BinTree BT)
{
	if(BT){
		if(!BT->Left && !BT->Right)//如果BT结点是叶子
			printf("%d ",BT->Data);
		PreorderPrintLeaves(BT->Left);
		PreorderPrintLeaves(BT->Right);
	}
}
int main()
{
	
	BinTree Bt = (BinTree)malloc(sizeof(struct TNode));
	BinTree Bt1 = (BinTree)malloc(sizeof(struct TNode));
	BinTree Bt2 = (BinTree)malloc(sizeof(struct TNode));
	BinTree Bt3 = (BinTree)malloc(sizeof(struct TNode));
	BinTree Bt4 = (BinTree)malloc(sizeof(struct TNode));
	BinTree Bt5 = (BinTree)malloc(sizeof(struct TNode));
	BinTree Bt6 = (BinTree)malloc(sizeof(struct TNode));
	Bt->Data = 1;Bt1->Data=2;Bt2->Data=3;
	Bt3->Data=4;Bt4->Data=5;Bt5->Data=6;
	Bt6->Data=7;	
	Bt->Left = Bt1;
	Bt->Right = Bt2;	
	Bt1->Left = Bt3;
	Bt1->Right = Bt4;	
	Bt2->Left = Bt5;
	Bt2->Right = Bt6;	
	Bt3->Left = NULL;
	Bt3->Right = NULL;	
	Bt4->Left = NULL;
	Bt4->Right = NULL;		
	Bt5->Left = NULL;
	Bt5->Right = NULL;		
	Bt6->Left = NULL;
	Bt6->Right = NULL;	
	
	printf("\nye zi bian li\n");
	
	PreorderPrintLeaves(Bt);
	printf("\n");

	
	return 0;

}
发布了63 篇原创文章 · 获赞 2 · 访问量 1443

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/105094965