Ⅰ c語言二叉樹
我試著來解答一下。這是一個遞歸函數。首先要理解T、L、R的含義。
假如L[i]=x1,R[i]=x2,那麼節點i的左右孩子分別就是x1,x2.
那麼T[x1]=i,T[x2]=i,就是指x1,x2的雙親節點就是i。
Status Dencend(Array1D L, Array1D R, int n, int u, int v, Array1D T)
/******************************************************************/
{
int i;
for(i=1;i<=n;i++)
{
T[i]=0;
}
for(i=1;i<=n;i++)
{
T[L[i]]=i; //你現在看看上邊的話,你是否能看懂呢?
T[R[i]]=i; //這里說的意思就是讓L[i] R[i]節點認祖歸宗,讓其知道自己的雙親節點是誰。
}
if(T[u]==v)return TRUE;//如果節點u的雙親節點是v,那麼皆大歡喜,返回true
if(T[u])//如果u有父節點的話
return Dencend(L,R,n,T[u],v,T);//那麼就看節點u的父節點是否是節點v的子節點。
return FALSE;
}
我都解釋的這么明白了,給分啊!!!!!!!!!!!!!!!!!!
Ⅱ c語言二叉樹
#include <stdlib.h>
#include<malloc.h>
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}tnode;
tnode *createtree()
{
tnode *t;
char ch;
ch=getchar();
if(ch=='0')
t=NULL;
else
{
t=(tnode *)malloc(sizeof(tnode));
t->data=ch;
t->lchild=createtree();
t->rchild=createtree();
}
return t;
}
void listtree(tnode *t)
{
if (t!=NULL)
{
printf("%c",t->data);
if(t->lchild!=NULL||t->rchild!=NULL)
{
printf("(");
listtree(t->lchild);
if(t->rchild!=NULL)
printf(",");
listtree(t->rchild);
printf(")");
}
}
}
void inorder(tnode *t)
{
if(t!=NULL)
{
inorder(t->lchild);
printf("%c\t",t->data);
inorder(t->rchild);
}
}
void leve(tnode *t)
{
tnode *quee[100];
int front,rear;
front=-1;
rear=0;
quee[rear]=t;
while(front!=rear)
{
front++;
printf("%c\t",quee[front]->data);
if(quee[front]->lchild!=NULL)
{
rear++;
quee[rear]=quee[front]->lchild;
}
if(quee[front]->rchild!=NULL)
{
rear++;
quee[rear]=quee[front]->rchild;
}
}
}
main()
{
tnode *t=NULL;
printf("請輸入二叉樹元素:");
t=createtree();
printf("廣義表的輸出:");
listtree(t);
printf("\n");
printf("二叉樹的中序遍歷:");
inorder(t);
printf("\n");
printf("二叉樹的層次遍歷:");
leve(t);
printf("\n");
system("pause");
}
/*
輸入:AB00CD00E00F000
輸出:A(B,C((D,E))
中序遍歷: B A D C E
層次遍歷:A B C D E
*/
另外,團IDC網上有許多產品團購,便宜有口碑
Ⅲ 二叉樹怎樣用C語言實現
以下代碼可實現二叉樹的遞歸創建與中序遍歷,但在輸入時需在輸入完有效數據後再連續輸入多個負數才可以。
#include <stdio.h>
#include <stdlib.h>
typedef struct BitNode
{
int data;
struct BitNode *lchile,*rchild;
}*BiTree;
BiTree CreateBiTree(BiTree &T)
{
int d;
scanf("%d",&d);
if (d<0)
return NULL;
else
{
if (!(T=(BiTree)malloc(sizeof(BiTree))))
{
exit(1);
}
T->data=d;//先根序創建二叉樹
printf("%d ",T->data);
T->lchile=CreateBiTree(T->lchile);//創建左子樹
T->rchild=CreateBiTree(T->rchild);//創建右子樹
return T;
}
}
void InOrderView(BiTree &T)//中序遍歷二叉樹
{
if(T)
{
InOrderView(T->lchile);
printf("%d ",T->data);
InOrderView(T->rchild);
}
}
void main()
{
BiTree T;
T=CreateBiTree(T);//遞歸創建二叉樹
InOrderView(T);
}
Ⅳ 數據結構二叉樹的程序,用c語言怎麼實現
您好,想要實現一個二叉樹,需要用到結構體來存儲每個節點的信息,並使用指針來存儲每個節點的左右子節點的地址。具體的實現方法可以參考下面的代碼示例:
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* createNode(int val) {
struct TreeNode* node = (struct TreeNode*) malloc(sizeof(struct TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
void insertNode(struct TreeNode* root, int val) {
if (root == NULL) {
return;
}
if (val < root->val) {
if (root->left == NULL) {
root->left = createNode(val);
} else {
insertNode(root->left, val);
}
} else {
if (root->right == NULL) {
root->right = createNode(val);
} else {
insertNode(root->right, val);
}
}
}
void printTree(struct TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
printTree(root->left);
printTree(root->right);
}
int main() {
struct TreeNode* root = createNode(5);
insertNode(root, 3);
insertNode(root, 2);
insertNode(root, 4);
insertNode(root, 7);
insertNode(root, 6);
insertNode(root, 8);
printTree(root);
return 0;
}
在這段代碼中,我們定義了一個結構體 TreeNode 來表示二叉樹的每個節點,結構體中包含了一個節點的數值 val,以及指向左子節點和右子節點的指針 left 和 right。