赞
踩
如果用大写字母标识二叉树结点,则一颗二叉树可以用符合下面语法图的字符序列表示。试编写递归程序,由这种形式的字符序列,建立相应的二叉树的二叉链表存储结构(附图见《严蔚敏:数据结构题集(C语言版)》第45页6.70)。
输入如图所示的字符序列。
建立相应二叉树的二成叉链表存储结构,并先序遍历输出。
A(B(#,D),C(E(#,F),#))
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;
- }
题解:将数据存储为酱紫~
读取两个字符,若第一次字符为逗号,将第二个字符存在节点,再读取一个字符,若为左括号,递归依次找左右节点;若第一个字符不是逗号,将第一个字符存在节点,依次找左右节点。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。