数据结构15——建立二叉树的二叉链表存储结构(严6.70)

Description

如果用大写字母标识二叉树结点,则一颗二叉树可以用符合下面语法图的字符序列表示。试编写递归程序,由这种形式的字符序列,建立相应的二叉树的二叉链表存储结构(附图见《严蔚敏:数据结构题集(C语言版)》第45页6.70)。

Input

输入如图所示的字符序列。

Output

建立相应二叉树的二成叉链表存储结构,并先序遍历输出。

  • Sample Input 
    A(B(#,D),C(E(#,F),#))
  • Sample Output
    AB#DCE#F#

#include<stdio.h>
#include<stdlib.h>

typedef struct BTNode{
	char data;
	struct BTNode *lchild;
	struct BTNode *rchild;
}BTNode;

BTNode *CreateTree(){
	char s1, s2;
	BTNode *q;
	q = (BTNode*)malloc(sizeof(BTNode));
	q->lchild = NULL;
	q->rchild = NULL;
	s1 = getchar();
	s2 = getchar();
	if(s1 == ','){
		q->data = s2;
		s1 = getchar();
		if(s1 == '('){
			q->lchild = CreateTree();
			q->rchild = CreateTree();
		}
	}
	else{
		q->data = s1;
		if(s2 == '('){
			q->lchild = CreateTree();
			q->rchild = CreateTree();
		}
	}
	return q;
}

void PrintfTree(BTNode *q){
	printf("%c",q->data);
	if(q->lchild)
	    PrintfTree(q->lchild);
	if(q->rchild)
	    PrintfTree(q->rchild);
}

int main(){
	BTNode *q = (BTNode*)malloc(sizeof(BTNode));
	q = CreateTree();
	PrintfTree(q);
	return 0;
}

题解:将数据存储为酱紫~


读取两个字符,若第一次字符为逗号,将第二个字符存在节点,再读取一个字符,若为左括号,递归依次找左右节点;若第一个字符不是逗号,将第一个字符存在节点,依次找左右节点。

猜你喜欢

转载自blog.csdn.net/chengchencheng/article/details/80627380