当前位置:首页 > 算法 > 正文内容

广义表输出二叉树

浩雨5年前 (2019-11-18)算法4715

广义表输出二叉树用到的主要是递归,递归的整个过程类似于栈,一层一层进去,最终会一层一层退出来,进去和退出的顺序跟栈的性质一致。

#include<stdio.h>
#include<stdlib.h>
typedef struct tnode{
	char data;	//二叉树结点值
	struct tnode *lchild,*rchild;
}BT;
/*以先序序列输入结点的值*/
BT *CreateBTree(){
	BT *t;
	char ch;
	scanf("%c",&ch);
	getchar();
	if(ch == '0')	//读入'0'时,将相应结点置空 
		t = NULL;
	else{
		t = (BT	*)malloc(sizeof(BT));	//新建结点
		//【结构体指针类型名 = (结构体类型名*) malloc (sizeof(结构体类型名))】 
		t->data = ch;
		printf("请输入%c结点的左孩子的结点:",t->data);
		t->lchild = CreateBTree();
		printf("请输入%c结点的右孩子的结点:",t->data);
		t->rchild = CreateBTree();
	}
	return t;
}
void ShowBTree(BT *T){
	if(T != NULL){
		printf("%c",T->data);	//输入该结点数据域
		if(T->lchild != NULL){
			printf("(");
			ShowBTree(T->lchild);
			if(T->rchild != NULL){
				printf(",");
				ShowBTree(T->rchild);
			}
			printf(")");
		}
		else if(T->rchild != NULL ){	//若左子树为空,右子树不为空
			printf("(");
			ShowBTree(T->lchild);
			if(T->rchild != NULL){
				printf(",");
				ShowBTree(T->rchild);
			}
			printf(")");
		}
	}
}
main(){
	BT *T = NULL;
	char flag;
	printf("请按先序序列输入二叉树的结点:\n");\
	printf("说明:输入结点后按回车('0'表示后继结点为空)\n");
	printf("请输入根结点:");
	T = CreateBTree();
	printf("二叉树建立成功!\n");
	printf("\n按广义表输出的二叉树为:");
	ShowBTree(T);
}


扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:https://myfpga.cn/index.php/post/63.html

分享给朋友:

“广义表输出二叉树” 的相关文章

常见算法的C语言实现(带题目、分析和答案) 穷举 递归 迭代 递推 分治 回溯 动态规划 贪心

常见算法的C语言实现(带题目、分析和答案) 穷举 递归 迭代 递推 分治 回溯 动态规划 贪心

1.1   基本思想1.1.1  穷举穷举(又称枚举)算法的基本思想是从所有可能的情况中搜索正确的答案。a)      题一查找数组中的两个元素,它们的和等于给定的目标值。给定一个包含 n 个整数的数组和一个目标值,找出...

(LeetCode刷题)1. 两数之和

(LeetCode刷题)1. 两数之和

题目解答一:/**  * Note: The returned array must be malloced, assume caller calls free(). &nbs...

(LeetCode刷题)2. 两数相加

(LeetCode刷题)2. 两数相加

题目解答一:简单实现思路:先遍历完两个链表,把各自的数字存入两个数组,然后对应位置的数相加,若结果大于10就进位到更高位的数。/**  * Definition for singly-linked list->  * s...

(LeetCode刷题)3. 无重复字符的最长子串

(LeetCode刷题)3. 无重复字符的最长子串

题目:解法一:class Solution(object):     def lengthOfLongestSubstring(self,s):        &nb...