浙大数据结构 玩转二叉链表

7-20 玩转二叉链表 (20 分)

设计程序,按先序创建二叉树的二叉链表;然后先序、中序、后序遍历二叉树。

输入格式:

按先序输入一棵二叉树。二叉树中每个结点的键值用字符表示,字符之间不含空格。注意空树信息也要提供,以#字符表示空树。

输出格式:

输出3行。第一行是先序遍历二叉树的序列,第二行是中序遍历二叉树的序列,第三行是后序遍历二叉树的序列。每行首尾不得有多余空格。序列中不含#。

输入样例:

ab##dc###

输出样例:

abdc
bacd
bcda

 

#include <stdio.h>
#include <stdlib.h>
typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode {
	ElementType Data;
	BinTree Left;
	BinTree Right;
};
BinTree CreatBinTree() {//先序建立二叉链表
	BinTree B;
	char cp;
	scanf("%c",&cp);
	if(cp=='#'){
		B=(BinTree)malloc(sizeof(struct TNode));
		//B=NULL;
		B->Data='#';
		B->Left=B->Right=NULL;
	}
		
	else {
		B=(BinTree)malloc(sizeof(struct TNode));
		B->Data =cp;
		B->Left =CreatBinTree();
		B->Right=CreatBinTree();
	}
	return B;
}
void PreorderPrintLeaves1( BinTree BT ) {//先
	if(BT->Data !='#') {
		printf("%c",BT->Data );
		PreorderPrintLeaves1( BT->Left  );
		PreorderPrintLeaves1( BT->Right  );
	}
}
void PreorderPrintLeaves2( BinTree BT ) {//中
	if(BT->Data !='#') {
		PreorderPrintLeaves2( BT->Left  );
		printf("%c",BT->Data );
		PreorderPrintLeaves2( BT->Right  );
	}
}
void PreorderPrintLeaves3( BinTree BT ) {//后
	if(BT->Data !='#') {
		PreorderPrintLeaves3( BT->Left  );
		PreorderPrintLeaves3( BT->Right  );
		printf("%c",BT->Data );
	}
}
int main() {
	BinTree BT = CreatBinTree();
	PreorderPrintLeaves1(BT);
	printf("\n");
	PreorderPrintLeaves2(BT);
	printf("\n");
	PreorderPrintLeaves3(BT);
	printf("\n");
	return 0;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二叉链表是一种用链表表示的二叉树结构,每个节点包含三个字段:data(存储节点的数据),left(指向节点的左子节点),right(指向节点的右子节点)。 在408数据结构中,可以通过二叉链表来实现二叉树的存储和操作。使用二叉链表可以方便地进行插入、删除和遍历等操作。 具体实现一个二叉链表需要定义一个节点类,其中包含上述三个字段。然后可以通过操作这些节点的指针来构建二叉树。 以下是一个示例代码,展示如何使用二叉链表表示二叉树: ```cpp #include <iostream> struct TreeNode { int data; TreeNode* left; TreeNode* right; TreeNode(int value) { data = value; left = nullptr; right = nullptr; } }; // 先序遍历 void preorderTraversal(TreeNode* root) { if (root == nullptr) { return; } std::cout << root->data << " "; preorderTraversal(root->left); preorderTraversal(root->right); } int main() { // 构建二叉树 TreeNode* root = new TreeNode(1); root->left = new TreeNode(2); root->right = new TreeNode(3); root->left->left = new TreeNode(4); root->left->right = new TreeNode(5); // 先序遍历出结果 std::cout << "Preorder traversal: "; preorderTraversal(root); std::cout << std::endl; // 释放内存 delete root->left->left; delete root->left->right; delete root->left; delete root->right; delete root; return 0; } ``` 在上面的示例代码中,通过定义一个`TreeNode`结构体来表示二叉链表的节点。然后构建了一个简单的二叉树,并进行了先序遍历出结果。最后释放了动态分配的内存。 希望这个示例能够帮助你理解如何使用二叉链表来表示和操作二叉树。如果有更多问题,可以继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值