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; }
题解:将数据存储为酱紫~
读取两个字符,若第一次字符为逗号,将第二个字符存在节点,再读取一个字符,若为左括号,递归依次找左右节点;若第一个字符不是逗号,将第一个字符存在节点,依次找左右节点。