樹結構相關代碼題
題目01(對應視頻45)
若二叉樹采用鏈式存盤結構,設求出指定結點在給定二叉排序樹的層次
題目概念分析
- 指定結點,表示在函式引數位置上需要添加上結點引數
- 二叉排序樹概念圖

結合上述的操作分析,對于該題目代碼撰寫分析,思路如下
- 先寫核心代碼,然后在加入框架
- 設定一個操作指標,指向根節點;
- 設定一個回圈,使得當前點的數值與根節點數值進行比較,
- 若指定結點的數值小于當前結點的數值,則說明指定結點的數值小—則繼續遞回訪問左子樹(左子樹的數值小于根節點的數值)
- 若指定結點的數值大于當前結點的數值,則遞回訪問右子樹,
- 設定一個變數level表示當前的層數數值,初始化為1,因為根節點只要存在第一層便是1;
核心代碼撰寫
- 先給出結構體代碼:
typedef struct TNODE
{
ElemType data;//資料域
struct BiTree* lchild,*rchild;//左右指標域
}BTNODE,* BiTree;
核心實作代碼:
int GetSortTreeLevel(BiTree * root ,BiTree * p)//p為制定節點
{
//設定操作指標
BiTree * bt = root;
if(bt == NULL){//樹為慷訓傳0
return 0;
}
if(bt != NULL){
while(bt->data != p->data){//回圈條件
if(p->data < bt->data){//指定數值比當前的小
bt = bt->lchild;//去訪問其左子樹
}else{
//否則去訪問右子樹
//這里包括了當前的數值相等的情況,若相等則直接跳出回圈,不會影響程式
bt = bt->rchild;
}
++level;//進行層數的添加,表示已經進入下一層了
}
//出回圈了,說明這里是回圈結束的部分
//bt->data == p->data
}
}
代碼整合
在給出核心代碼后,對整體代碼框架進行整合,如下:
typedef struct TNODE
{
ElemType data;//資料域
struct BiTree* lchild,*rchild;//左右指標域
}BTNODE,* BiTree;
int GetSortTreeLevel(BiTree * root ,BiTree * p)//p為制定節點
{
int level = 1;
//設定操作指標
BiTree * bt = root;
if(bt == NULL){//樹為慷訓傳0
return 0;
}
if(bt != NULL){
while(bt->data != p->data){//回圈條件
if(p->data < bt->data){//指定數值比當前的小
bt = bt->lchild;//去訪問其左子樹
}else{
//否則去訪問右子樹
//這里包括了當前的數值相等的情況,若相等則直接跳出回圈,不會影響程式
bt = bt->rchild;
}
++level;//進行層數的添加,表示已經進入下一層了
}
//出回圈了,說明這里是回圈結束的部分
//bt->data == p->data
return level;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/348523.html
標籤:其他
上一篇:全新【Photoshop 2022 for mac】中文版發布下載 支持M1 M1X M2處理器 詳細安裝教程
下一篇:openCV編譯匯入
