BinaryTree 遞迴遍歷 建樹 C語言

2021-08-08 11:02:03 字數 3174 閱讀 7782

#include 

#include

#include

typedef char eleltype;

//定義結構體

typedef struct

btnode,*binarytree;

//申請結點

btnode * buynode()

//釋放結點

void freenode(btnode *p)

//遞迴先序遍歷二叉樹

void preorder(btnode *ptr)

}//遞迴中序遍歷二叉樹

void inorder(btnode *ptr)

}//遞迴後序遍歷二叉樹

void pastorder(btnode *ptr)

}//建立二叉樹方式一:螢幕讀入 abc##de##f##g#h## (#代表null)

btnode * createtree1()

returns;}

//建立二叉樹方式二:二級指標 字串

btnode * createtree3(char ** const pstr)

returns;}

//方式三:中序 前序 建立二叉樹

int find(char *is,int n,char ch)

}return -1;

}btnode * create(char *ps,char *is,int n)

//建立左子樹(search,searchline,len)

s->leftchild = create(ps+1,is,pos);

//建立右子樹 (search,searchline,len)

s->rightchild = create(ps+pos+1,is+pos+1,n-pos-1);

}returns;}

btnode * createpi(char *ps,char *is)

else

}// 方式四:中序 後序 建立二叉樹

btnode * createtree(char *ls,char *is,int n)

s=buynode();

s->data = ls[n-1];

s->leftchild=createtree(ls,is,pos);

s->rightchild = createtree(ls+pos,is+pos+1,n-pos-1);

}returns;}

btnode * createil(char *is,char *ls)

else

}btnode *findvalue(btnode *ptr,elemtype x)

else

return p;

}}//層序遍歷二叉樹

int front = 0,rear =1;

void levelorder(btnode *ptr)

else

}}//雙分支結點的個數

int sizebinary(btnode *ptr)

else

else

else}}

}//尋找孩子結點的雙親結點

btnode * paret(btnode *ptr,btnode *child)

else

}}btnode * findparet(btnode *ptr,btnode *child)

else

}// 葉子結點個數

int sizeleaf(btnode *ptr)

else

if(ptr->leftchild==null && ptr->rightchild ==null)

else

}//結點總個數

int size(btnode *ptr)

return

1+size(ptr->leftchild)+size(ptr->rightchild);

}// 樹的深度

int depth(btnode *ptr)

int dl=depth(ptr->leftchild);

int dr=depth(ptr->rightchild);

return(dl>dr?dl:dr)+1;

}void main()

作業:

// obj1:大數的加減乘除取模判斷素數開方次方 檔案加密的分布式演算法

設計文件+功能函式+模組設計

// obj2:哈夫曼編碼 基於哈夫曼編碼的文字檔案解壓縮

// obj3:日曆系統 年月日 小時分 對日期進行操作 日程安排表

下次函式:

int sizeone();

int sizeoneleft();

int sizeoneright();

is_full_binarytree(root); //滿二叉樹

bool is_comp_binarytree(btnode *ptr); //完全二叉樹

bool is_balance_binarytree(btnode *ptr); //平衡二叉樹

//非遞迴建樹 (is ls ps)

void niceperorder(btnode *ptr);

void niceinorder(btnode *ptr);

void nicepastorder(btnode *ptr);

// 找兩個結點的最近公共雙親結點

btnode * findnearparet(btnode *ptr ,btnode *child1,btnode *child2);

// 找這個樹的最遠兩個結點的距離 返回兩個結點的位址 …可以用結構體存放 位址 + int

int maxpath(btnode *ptr);

struct retnode

; retnode retpath(btnode *ptr);

int rettwomaxpath(btnode ptr,btnode &child1,btnode *&child2);

問題:

//引用和指標的區別 引用的特點:邏輯 物理上 分類

// 寫乙個 棧 佇列 k佇列 無鎖佇列 棧滿擴容 堆區無空間??

//如何解決記憶體不足 單程序無問題 多程序的執行緒安全 效率 多執行緒共享

// ++ 葉子結點個數 左分支結點 右分支 雙分支??

遞迴遍歷檔案

function enumfileinrecursion path pchar longint stdcall varsearchrec tsearchrec found integer tmpstr string i integer begin i 1 result 0 查詢結果 檔案數 加上搜尋...

遞迴遍歷樹

其實就是業務驅動成長,因為昨天給的乙個介面是涉及多級架構的,也就是一級結構下面可以有多個二級架構,二級下面還可以有多個 因為不能確定下面到底有多少級,而又需要把所有組織遍歷出來放在 中展示。類似這種 一開始沒考慮什麼多級,用了for遍歷,後來一想,不對呀,不能確定有多少個的,不能這樣遍歷。然後問了一...

遞迴遍歷目錄

遞迴 乙個函式內部在其內部不呼叫其他函式,而是呼叫自身,類似迴圈 注,自己玩自己,防止死遞迴 使用遞迴來遍歷出乙個目錄中的所有檔案 import os def getalldirre path,sp 引數 路徑 返回值 none 完成功能,獲取呼叫者傳遞的路徑下的所有檔案 檔案 直接顯示,資料夾 二...