当前位置:首页 » 编程软件 » 编程树问题

编程树问题

发布时间: 2022-06-17 04:08:29

㈠ 计算机软件基础一二叉树编程题,这道题有部分地方看不懂

malloc(sizeof(BTNode))是申请一个指定字节数的内存空间,并将首地址赋值给指针变量t。

malloc是动态随机分配内存空间的方法。可以根据需要分配内存空间给程序使用

(BTNode *)malloc(sizeof(BTNode))的意思是,动态分配空间为结构体BTNode字节数大小的空间,并指定此空间为BTNode类型。

sizeof是关键字,意为取……的字节数。

㈡ C语言编程题:一个二叉树构造问题

给你树的实现方法,以前写的,你可以先思考一下// main.cpp// BTree(二叉树的实现)//#include #include using namespace std;//二叉树的每个节点class TreeNode {public: //无参构造方法 TreeNode() { left = right = 0; } //有参构造方法

㈢ 编程问题,树的枚举,求算法

不是很懂你的意思。
1.什么叫不同结构?
2.是否是给出一些树,然后按结构把这些树分成几组?

你的意思是,给出节点数,然后计算出可以组成多少种树?

㈣ 二叉树编程问题

/*已经修改*/
/*输入样例:abd@ei@j@@f@@cg@h@@@@其中@表示空格*/
/*二叉树以先序输入的方法,其中必须补为完全二叉树:即叶子结点下面也要挂空指针。如输入abc@@@@。*/
#include<stdio.h>
#include<malloc.h>
typedef char datatype;
typedef struct _node{
datatype data;
struct _node *lchild,*rchild;
}BTnode;/*结点定义*/
typedef BTnode *BinTree;/*根指针定义*/
void CreateBinTree(BinTree *T)/*此函数使用地址传递。根指针T在函数中被指向二叉数的根结点*/
{
char ch;
if((ch=getchar())==' ') *T=NULL;
else {
*T=(BTnode *)malloc(sizeof(BTnode));/*T始终是二叉树的根结点(递归用的仅仅是左右结点*/
(*T)->data=ch;
CreateBinTree(&((*T)->lchild));/*注意 地址传递,若传递BTnode *型,如:T->lchild;则表示是传递其中的内容,没有意义(在前面用BTnode *p定义的话)*/
CreateBinTree(&((*T)->rchild));
}
}
void Inorder(BinTree T)/*中序*/
{
if(T!=NULL)
{
Inorder(T->lchild);
printf("%c",T->data);
Inorder(T->rchild);
}
}
void Preorder(BinTree T)/*前序*/
{
if(T!=NULL)
{
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}
void postorder(BinTree T)/*后序*/
{
if(T)
{
postorder(T->lchild);
postorder(T->rchild);
printf("%c",T->data);
}
}
int main()
{
BinTree root;/*根结点指针定义*/
CreateBinTree(&root);/*传入根结点指针的地址在函数中指向二叉树根*/
Preorder(root);
}

㈤ 入门C语言编程植树问题

程序本身是没问题的,但是可能是输出格式的问题,一般OJ题目都有严格的输入输出检测的。

题目的output中是:5[空格]3

#include<stdio.h>
intmain(void)
{
intm,n;
scanf("%d%d",&m,&n);
printf("%d%d",m/n,m%n);
return0;
}

㈥ 一个出现在C语言编程题的二叉树问题

先序第一个为根节点,后序第一个为最左下节点,先序最后一个为最右下节点,注意到,先序里b,d,e,后序里d,e,b,由此知道,b为,d,e的父母节点,做到一半,发现你的后序好像写错了,-
-!。g在f后面吧。要不然就是前序的错了。忽略的你的错误,可以知道,c,f,g这三个节点的关系。由后序规律,可以知道这两科子树和根节点的关系。画出树,在用中序遍历一下就出来了。顺便说一下,先序就是先读根节点在读取左节点,最后读取右节点。中序,后序的话就是读取根节点的顺序问题。还有二叉树嘛,就是一个节点最多只有的两个分叉的树。
-
-!

㈦ 编程中的树的遍历分为哪三种

前序遍历
中序遍历
后序遍历
这是数据结构这门课程中关于树的知识,这章是很重要也很有意思的,能衍生出很多实际问题。

㈧ 编程关于树的问题

这个是c++程序,呵呵
显示的是后续遍历
#include<iostream.h>
typedef struct TreeNode
{
int key;
struct TreeNode *left;
struct TreeNode *right;

}treeNode;

class BiSortTree
{
public:
BiSortTree(void);
void desplayTree(void);//显示这个树
void insertTree(int key);//在树中插入一个值
deleteTree(int key);//在树中删除一个值
treeNode* searchTree(int key);//在树中查找一个值

~BiSortTree();

private:
treeNode* buildTree(treeNode* head,int number);//建立一个树
treeNode* search(treeNode* head ,int key);//查找
treeNode* BiSortTree::searchParent(treeNode* head,treeNode* p);//查找出p的父亲节点的指针
treeNode* BiSortTree::searchMinRight(treeNode* head);//找到右子树中最小的节点

void showTree(treeNode* head);//显示
void destroyTree(treeNode* head);//删除

treeNode *Head;

};

/**************以下是建立一个二叉排序树****************/
BiSortTree::BiSortTree()
{
cout<<"建立一棵二叉排序树,请输入你要建树的所有数(以-1 作为结束标志!): "<<endl;
Head=NULL;
int number;
cin>>number;
while(number!=-1)
{
Head=buildTree(Head,number);
cin>>number;

}

}
treeNode* BiSortTree::buildTree(treeNode* head,int number)
{

treeNode *p;
p=new treeNode;
p->key=number;
p->left =p->right=NULL;

if(head==NULL)
{

return p;
}
else
{

if(p->key <head->key)
head->left=buildTree(head->left,number);
else
head->right=buildTree(head->right,number);

return head;
}

}
/*****************以下是在一棵二叉排序树插入一个数***********************************/
void BiSortTree::insertTree(int key)
{

Head=buildTree(Head,key);

}
/*****************以下是在一个二叉排序树查找一个数是否存在*************************/
treeNode* BiSortTree::searchTree(int key)
{
return search(Head,key);
}
treeNode* BiSortTree::search(treeNode* head ,int key)
{
if(head==NULL)
return NULL;
if(head->key==key)
return head;
else
{
if(key<head->key )
return search( head->left,key);

else
return search(head->right,key);

}

}

/************以下是在一个二叉排序树删除一个给定的值*********************************/
BiSortTree::deleteTree(int key)
{

treeNode *p;
p=NULL;
p=search(Head,key);
if(p==NULL)
{
cout<<"Don't find the key";

}
if(p==Head)
{
Head=NULL;

}
else
{
treeNode* parent;
parent=searchParent(Head,p);
if(p->left==NULL&&p->right==NULL)//叶子节点
{
if(parent->left==p)
{
parent->left=NULL;
}
else
{
parent->right=NULL;

}
}
else//非叶子节点
{
if(p->right==NULL)//该节点没有右孩子
{
if(parent->left==p)
{
parent->left=p->left ;
}
else
{
parent->right=p->left;

}
}

else//该点有左右孩子
{
treeNode * rightMinSon,* secondParent;//secondParent为右子树中的最小节点的父亲
rightMinSon=searchMinRight(p->right);
secondParent=searchParent(p->right ,rightMinSon);

secondParent->left=rightMinSon->right;

if(p->right==rightMinSon)//右子树中的最小节点的父亲为p
{

p->right=rightMinSon->right ;

}

p->key=rightMinSon->key ;

}
}
}
}

treeNode* BiSortTree::searchParent(treeNode* head,treeNode* p)
{

if(head->left==p||head->right==p||head==p||head==NULL)
return head;
else
{
if(p->key<head->key)
return searchParent(head->left ,p);
else
return searchParent(head->right ,p);

}

}

treeNode* BiSortTree::searchMinRight(treeNode* head)//找到右子树中最小的节点
{

if(head->left ==NULL||head==NULL)
{
return head;

}
else
{
return searchMinRight(head->left);

}

}

/*****************以下是显示一个二叉排序树****************************************/
void BiSortTree::desplayTree(void)
{

showTree(Head);
cout<<endl;
}
void BiSortTree::showTree(treeNode* Head)
{

if(Head!=NULL)
{
showTree(Head->left ) ;

cout<<Head->key<<' ' ;

showTree(Head->right) ;

}

}

/*****************以下是删除一棵整二叉排序树************************************/
BiSortTree::~BiSortTree()
{
cout<<"已经消除了一棵树!!!!"<<endl;
destroyTree(Head);
}
void BiSortTree::destroyTree(treeNode* head )
{

if(head!=NULL)
{
destroyTree(head->left );
destroyTree(head->right );
delete head;

}

}

/*********************/
void print()
{

cout<<endl<<endl<<"以下是对二叉排序树的基本操作:"<<endl
<<"1.显示树的中序遍历"<<endl
<<"2.插入一个节点"<<endl
<<"3.寻找一个节点"<<endl
<<"4.删除一个节点"<<endl;
}

void main()
{
BiSortTree tree;
int number;
int choiceNumber;
char flag;
while(1)
{
print() ;

cout<<"请选择你要进行的操作(1~4)"<<endl;
cin>>choiceNumber;
switch(choiceNumber)
{
case 1:
tree.desplayTree();break;
case 2:
cout<<"请插入一个数: "<<endl;
cin>>number;
tree.insertTree(number);
tree.desplayTree();
break;

case 3:
cout<<"请插入你要找数: "<<endl;
cin>>number;
if(tree.searchTree(number)==NULL)
{
cout<<"没有发现"<<endl;
}
else
{

cout<<"发现"<<endl;

}
break;

case 4:
cout<<"请输入你要删除的数: "<<endl;
cin>>number;
tree.deleteTree(number);
tree.desplayTree();
break;

default: break;
}
cout<<"你是否要继续(Y/N)?"<<endl;
cin>>flag;
if(flag=='N'||flag=='n')
break;

}

}

㈨ 数据结构创建二叉树编程问题

//这个题目挺有意思的,很喜欢,你看看我这个咋样啊?
#include<stdio.h>
#include<malloc.h>
typedef
char
ElemType
;
typedef
struct
node
{
ElemType
data
;
struct
node
*lchild
;
struct
node
*rchild
;
}BTree,*pBTree
;
//先序创建树
void
CreateBTree(pBTree
*T)
//此处参数应该用指针的指针,应给它要改变指向二叉树根的那个指针
{
char
ch
;
ch=getchar();
getchar();
//得到回车按那个字符
if(ch
=='
')
//输入空字符时要打空格
{
(*T)
=
NULL
;
return
;
}
else
{
if(
!(
(*T)
=
(pBTree)
malloc(sizeof(BTree))
)
)
return
;
(*T)->data
=
ch
;
CreateBTree(
&(*T)->lchild
);
CreateBTree(
&(*T)->rchild
);
}
}
void
BTreePrint(BTree
*Tr,int
n)
//逆时针旋转90°打印二叉树,n为缩进层数,初始值为0
{
int
i;
if(Tr
==
NULL)
return;
BTreePrint(Tr->rchild,n+1);
for(i
=
0;i<n;i++)
printf("
");
if(n
>=
0)
{
printf("--");
printf("%c\n",Tr->data);
}
BTreePrint(Tr->lchild,n+1);
}
void
main()
{
pBTree
bTree
;
CreateBTree(&bTree);
BTreePrint(bTree,0);
}
输入举例:建立以A为根B、C分别为左右子树的二叉树!输入格式为:
A
回车!
B
回车!
空格
回车!
空格
回车!
C
回车!
空格
回车!
空格
回车!

㈩ 二叉树的编程问题

//这个题目挺有意思的,很喜欢,你看看我这个咋样啊?

#include<stdio.h>
#include<malloc.h>
typedef char ElemType ;
typedef struct node
{
ElemType data ;
struct node *lchild ;
struct node *rchild ;
}BTree,*pBTree ;

//先序创建树
void CreateBTree(pBTree *T)
//此处参数应该用指针的指针,应给它要改变指向二叉树根的那个指针
{
char ch ;
ch=getchar();
getchar(); //得到回车按那个字符
if(ch ==' ') //输入空字符时要打空格
{
(*T) = NULL ;
return ;
}
else
{
if( !( (*T) = (pBTree) malloc(sizeof(BTree)) ) ) return ;
(*T)->data = ch ;

CreateBTree( &(*T)->lchild );
CreateBTree( &(*T)->rchild );
}
}

void BTreePrint(BTree *Tr,int n)
//逆时针旋转90°打印二叉树,n为缩进层数,初始值为0
{
int i;
if(Tr == NULL) return;

BTreePrint(Tr->rchild,n+1);
for(i = 0;i<n;i++)
printf(" ");
if(n >= 0)
{
printf("--");
printf("%c\n",Tr->data);
}
BTreePrint(Tr->lchild,n+1);
}

void main()
{
pBTree bTree ;
CreateBTree(&bTree);
BTreePrint(bTree,0);
}

输入举例:建立以A为根B、C分别为左右子树的二叉树!输入格式为:
A 回车!
B 回车!
空格 回车!
空格 回车!
C 回车!
空格 回车!
空格 回车!

热点内容
跳转页源码 发布:2024-09-17 03:13:05 浏览:543
html文件上传表单 发布:2024-09-17 03:08:02 浏览:784
聊天软件编程 发布:2024-09-17 03:00:07 浏览:726
linuxoracle安装路径 发布:2024-09-17 01:57:29 浏览:688
两个安卓手机照片怎么同步 发布:2024-09-17 01:51:53 浏览:207
cf编译后没有黑框跳出来 发布:2024-09-17 01:46:54 浏览:249
安卓怎么禁用应用读取列表 发布:2024-09-17 01:46:45 浏览:524
win10设密码在哪里 发布:2024-09-17 01:33:32 浏览:662
情逢敌手迅雷下载ftp 发布:2024-09-17 01:32:35 浏览:337
安卓如何让软件按照步骤自动运行 发布:2024-09-17 01:28:27 浏览:197