二叉樹的一些操作

2021-08-21 15:33:12 字數 1873 閱讀 7506

標頭檔案

樹.h#pragma once

#include

#include

#include

#include

#include

#include

typedef char datatype;

typedef struct btnodebtnode;

btnode*greattree(datatype pre, int size, int *pi)

btnode*pnode = (btnode*)malloc(sizeof(btnode));

assert(pnode);

pnode->data = pre[*pi];

(*pi)++;

pnode->pleft = greattree(pre, size, pi);

pnode->pright = greattree(pre, size, pi);

return pnode;

}//前序

void preorder(btnode*pnode)

printf("%c ", pnode->data);

preorder(pnode->pleft);

preorder(pnode->pright);

}//中序

void inorder(btnode*pnode)

inorder(pnode->pleft);

printf("%c ", pnode->data);

inorder(pnode->pright);

}//後序

void reorder(btnode*pnode)

reorder(pnode->pleft);

reorder(pnode->pright);

printf("%c ", pnode->data);

}//求節點個數

int getsize(btnode *pnode)

//int n = 0;

//if (pnode->pleft==null&&pnode->pright==null)

return getsize(pnode->pleft) + getsize(pnode->pright) + 1;

}//求葉子節點的個數

int getleafsize(btnode*pnode)

//求第k層上的節點個數

int getlevelksize(btnode*pnode,int k)

//查詢(判斷乙個data在不在乙個樹中)在,返回位址,不在,返回null,

btnode*find(btnode*proot, datatype data)

return  find(proot->pright, data);

}//求樹的高度

int deep(btnode*pnode)

//判斷一棵樹是否為完全二叉樹

void ifall(btnode*pnode,int k)

ifall(pnode->pleft,k+1);

ifall(pnode->pright,k+1);

}原始檔

例項:#include"樹.h"

int main()

{datatype pre = "abd##e##cf##g##";

int size = strlen(pre);

int pi = 0;

btnode*pnode = greattree(pre, size, &pi);

preorder(pnode);

printf("\n");

inorder(pnode);

printf("\n");

reorder(pnode);

printf("\n");

二叉樹的一些操作

1 include 2 include 3 4 typedef struct binodebinode,bitree 910 void createbitree bitree t 建立二叉樹 11int gettreeheight bitree t 返回二叉樹高度 12int getallnode ...

二叉樹的一些操作

1 include 2 include 3 4 typedef struct binodebinode,bitree 910 void createbitree bitree t 建立二叉樹 11int gettreeheight bitree t 返回二叉樹高度 12int getallnode ...

二叉樹的一些基本操作

看東西容易,寫東西確實就複雜多了呀,花了兩天時間把二叉樹的資料結構及一些相關基本演算法的原理認真研究了下,並寫出了相應的 包括二叉樹的前序建立 前中後序遍歷 層序遍歷 刪除 通過前序和中序序列構造二叉樹等等 include 定義資料元素型別 typedef int element 定義二叉樹節點 t...