當前位置:首頁 » 編程語言 » c語言輸出一個奇怪的數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言輸出一個奇怪的數

發布時間: 2022-06-04 06:31:18

c語言中寫遞歸來前序輸出一顆樹,但最後運行變成死循環

沒有賦值給child

⑵ 急急急!!!怎麼用C語言輸出一個完全二叉樹!!!就不是C++也不是JAVA,要C編的代碼,在線等QAQ

一般來說還是要用到遞歸的。。。

⑶ C語言數據結構,二叉樹問題,輸出一個二叉樹問題

這個幾乎都江堰市給回老師了

⑷ 用c語言輸出樹

假設輸出這棵樹:
.....7
..../.\
...5...6
../\.../\
.1..2.3..4
其中.代表空格

首先不論你用什麼方法(先根,中根,後根),將樹讀入一個數組
然後計算各層的結點數,當然也可以在遍歷的同時,將各層的結點數用一個數組保存起來
然後用for循環控制輸出的層數(注意,將"/","\"所佔層數也考慮進去),
然後具體輸出各層,至於每個結點,以及"/"和"\"間各空多少空格,
自己多輸出幾次看看效果,調整就可以了

⑸ c語言_樹

我很奇怪,不用先序中序或者中序後序,你如何能確定一棵唯一的樹呢,不能確定樹如何來遍歷等等。。。。。。。。。。

參考一下
一、 實驗名稱:二叉樹的建立和遍歷
二、 實驗目的:練習遞歸演算法
三、 實驗內容:在上一次實驗的基礎之上增加以下功能
a) 統計二叉樹深度
b) 統計二叉樹中葉子個數
c) 二叉樹中所有左右子樹交換
四、 實驗步驟
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#define size 100
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
} binode, *bitree;
typedef struct
{
bitree data[size];
int tag[100];
int top;
}sqstack;

void initstack(sqstack &t)
{
t.top=-1;
}
int stackempty(sqstack t)
{
if(t.top==-1)
return 1;
else
return 0;
}
int gettop(sqstack &t,bitree &a)
{
if(t.top==-1)
return 0;
else
{
a=t.data[t.top];
t.top--;
return 1;
}
}
int push(sqstack &t,bitree &a)
{
if(t.top==size-1)
return 0;
else
{
t.data[++t.top]=a;
return 1;
}
}
int pop(sqstack &t,bitree &a)
{
if(t.top==-1)
return 0;
else
{
a=t.data[t.top--];
return 1;
}
}
void createbitree(bitree &T,char a[],int la,int ha,char b[],int lb,int hb)
{
int m;
char c;
if(la>ha)
T=NULL;
else
{
if(!(T=(bitree)malloc(sizeof(binode))))
exit(0);
else
{
T->data=a[la];
m=lb;
while(b[m]!=a[la]) m++;
createbitree(T->lchild,a,la+1,la+m-lb,b,lb,m-1);
createbitree(T->rchild,a,la+m-lb+1,ha,b,m+1,hb);
}
}
}
int createbitree(bitree &T)
{
char a[5], b[5];
int i, j, n;
char ch;
n=0;
printf("abcd*badc\n");
scanf("%c", &ch);
while( ch!='*' ) { a[n++]=ch; scanf("%c", &ch);}
for(i=0; i<n; i++) scanf("%c", &b[i]);
createbitree(T, a, 0, n-1, b, 0, n-1);

}
int preorder (bitree p)
{
sqstack S;
initstack(S);
printf("先序遍歷\n");
while(!stackempty(S) || p!=NULL)
{
while(p!=NULL) //指向左子樹
{
printf("%c ",p->data);
push(S,p); //非空時入棧
p=p->lchild;
}
pop(S,p); //指針出棧

p=p->rchild;
}
printf("\n");
}
int inorder (bitree p)
{
sqstack s;
initstack(s);
printf("中序遍歷\n");
while(!stackempty(s)||p)
{
if(p)
{
push(s,p);
p=p->lchild;
}
else
{
pop(s,p);
printf("%c ",p->data);
p=p->rchild;
}
}
return 1;

}
void postorder(bitree p)
{
printf("\n");
sqstack s;
initstack(s);
printf("後序輸出\n");
while(p||!stackempty(s))
{
while(p)
{
s.top++;
s.data[s.top]=p; //子樹根結點進棧
s.tag[s.top]=0; //設此根結點標志初始化為0,表示左右孩子都沒訪問,當訪問完左子樹 tag 變為1
p=p->lchild; //進入左子樹訪問。(左子樹根結點全部進棧)
}
while((s.top>-1)&&(s.tag[s.top]==1))
{
p=s.data[s.top];
cout<<p->data<<" "; //沒有孩子的根結點,也就是它父親的左孩子或右孩子
s.top--;
}
if(s.top>-1)
{
p=s.data[s.top];
s.tag[s.top]=1; //進入右子樹 前,標志tag變為1
p=p->rchild; //進入右子樹
}
else
p=NULL;
}
}
void CountLeaf (bitree T, int& count)
{
if ( T )
{
if ((!T->lchild)&& (!T->rchild)) count++;
CountLeaf(T->lchild , count); //統計左子樹中葉子個數
CountLeaf(T->rchild ,count); //統計右子樹中葉子個數
}
}
int depthval=0,depthLeft=0, depthRight=0;
int Depth (bitree T )
{
if ( !T )
depthval = 0; // depthval是一個全程變數
else
{
depthLeft = Depth( T->lchild );
depthRight = Depth( T->rchild );
depthval = 1 + (depthLeft > depthRight ? depthLeft : depthRight);
}
return depthval;
}
void change(bitree T)
{
bitree p,q;
if(T)
{
p=T->lchild;
T->lchild=T->rchild;
T->rchild=p;
change(T->lchild);
change(T->rchild);
}
}
void main()
{
bitree T;
int count=0;
createbitree(T) ;
preorder(T);
inorder(T);
postorder(T);
CountLeaf (T,count);
printf("\n");
printf("葉子的個數是:%d\n",count);
Depth ( T );
printf("樹的深度是:%d\n",depthval);
printf("交換後。。。\n");
change(T);
preorder(T);inorder(T);
postorder(T);
}

⑹ 求c語言數據結構二叉樹的建樹,前序遍歷,輸出樹的代碼,能用採納。

#include
#include
#define MAXSIZE 100 //二叉樹中最多的結點數
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;

struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//定義函數指針
typedef void(* Visit)(BiTree);
//二叉樹的初始化
void Init_BiTree(BiTree *T)
{
*T = NULL;
}
//判斷二叉樹是否為空,返回1
int IsEmpty_BiTree(BiTree *T)
{

return *T == NULL;
}
//創建二叉樹
void Create_BiTree(BiTree *T)
{
char ch;
ch = getchar();
//當輸入的是"#"時,認為該子樹為空

if(ch == '#')

*T = NULL;
//創建樹結點
else{

*T = (BiTree)malloc(sizeof(BiTNode));

(*T)->data = ch; //生成樹結點
//生成左子樹
Create_BiTree(&(*T)->lchild);

//生成右子樹
Create_BiTree(&(*T)->rchild);

}
}
//輸出結點的值
void Print_BiTreeNode(BiTree T)
{
printf("%c\t",T->data);

}
//先序遍歷二叉樹
void PreOrder_BiTree(BiTree T,Visit visit)
{
if(!IsEmpty_BiTree(&T))
{
visit(T);

PreOrder_BiTree(T->lchild,visit);
PreOrder_BiTree(T->rchild,visit);

}
}
int main(){
BiTree T;
//將二叉樹初始為一個空的二叉樹
Init_BiTree(&T);
//創建二叉樹
Create_BiTree(&T);
//先序遍歷
printf("\n先序遍歷結果:");
PreOrder_BiTree(T,Print_BiTreeNode);
return 0;
}

⑺ 用C語言 輸出二叉樹,要求輸出樹的形狀。 PrintTree(BiTree T,int level)

typedef struct _BinaryTree_
{
ElementType Element;
struct _BinaryTree_ * Left;
struct _BinaryTree_ * Right;
}BiTree;

void PrintTree(BiTree* T,int level)
{
if(level)
{
printf((*T).Element);
if((*T).Left!=NULL)
PrintTree((*T).Left,level--);
if((*T).Right!=NULL)
PrintTree((*T).Right,level--);
}
}

⑻ 用c語言輸出聖誕樹,在線急等

參考下面代碼
#include <stdio.h>
void main()
{
int i,j;

printf("*\n");
for (i=2; i<4; i++)
{
printf(" ");
for (j=1; j<2*i;j++)
printf("*");
printf("\n");
}
for (i=1; i<5; i++)
{
printf(" ");
for (j=1; j<2*i; j++)
printf("*");
printf("\n");
}
for (i=1; i<4; i++)
{
printf(" ");
printf("***\n");
}
}