2 删除相关子树算法
Time Limit:1000MS Memory Limit:65535K
题型: 编程题 语言: G++;GCC
描述
构造二叉链表表示的二叉树:按先序次序输入二叉树中结点的值,'#'字符表示空树,构造二叉链表表示的二叉树T,编写算法完成:对于树中每一个值为X的结点,删 去以它为根的子树,并释放相应的空间(说明:二叉树结点值为单字符,且树中可能出现值重复的结点)。
#include "stdio.h"
#include "malloc.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;//左右孩子指针
} BiTNode,*BiTree;
Status CreateBiTree(BiTree &T) { // 算法6.4
// 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树,
// 构造二叉链表表示的二叉树T。
char ch;
scanf("%c",&ch);
if (ch=='#') T = NULL;
else {
if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;
________________________ // 生成根结点
_______________________ // 构造左子树
_________________________ // 构造右子树
}
return OK;
} // CreateBiTree
int main() //主函数
{
//补充代码
}//main
输入格式
第一行输入先序次序二叉树中结点 第二行输入一个要删除的结点值
输出格式
第一行输出删除后的二叉树先序遍历的序列(不输出空树) 第二行输出删除后的二叉树中序遍历的序列(不输出空树)
输入样例
ABDCG####E##CF### C
输出样例
ABDE DBEA
#include "stdio.h"
#include <iostream>
#include "malloc.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
using namespace std;
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
Status CreateBiTree(BiTree &T) {
char ch;
scanf("%c",&ch);
if (ch=='#') T = NULL;
else {
if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
Status p(BiTree T,char c)
{
if(!T)return 0;
else
{
if(T->data == c)
{
T->lchild = NULL;
T->rchild = NULL;
}
else
{
cout<<T->data;
}
p(T->lchild,c);
p(T->rchild,c);
}
return 1;
}
Status i(BiTree T,char c)
{
if(!T)return 0;
else
{
i(T->lchild,c);
if(T->data == c)
{
T->lchild = NULL;
T->rchild = NULL;
}
else
{
cout<< T->data;
}
i(T->rchild,c);
}
return 1;
}
int main()
{
char c;
BiTree T;
CreateBiTree(T);
cin >> c;
p(T,c);
cout<<endl;
i(T,c);
return 0;
}
该篇文章介绍了如何使用C++编程实现一个算法,接收先序遍历的二叉树节点值,删除指定值的节点及其所有子树,并保持剩余部分的链表结构。主要涉及递归、结构体定义和内存管理操作。
841

被折叠的 条评论
为什么被折叠?



