btree.h (結構定義, 基本操作, 遍歷)
#define ms 10
typedef struct btreenodebtreenode;
btreenode* initbtree();
/*初始化二叉樹,即把樹根指標置空*/
btreenode* createbtree(char *a);
/*根據a所指向的二叉樹廣義表字串建立對應的儲存結構,返回樹根指標*/
int btreeempty(btreenode* bt);
/*判斷一顆二叉樹是否為空,若是則返回1,否則返回0*/
void preorder(btreenode * bt);
/*先序遍歷的遞迴演算法*/
void inorder(btreenode * bt);
/*中序遍歷的地鬼演算法*/
void postorder(btreenode * bt);
/*後序遍歷的遞迴演算法*/
void levelorder(btreenode* bt);
/*按層遍歷由bt指標所指向的二叉樹*/
void inorder(btreenode* bt);
/*對二叉樹進行中序遍歷的非遞迴演算法*/
int btreedepth(btreenode * bt);
/*求bt指向的一顆二叉樹深度*/
char* findbtree(btreenode * bt, char x);
/*從bt所指向的二叉樹中查詢值為x的節點*/
void printbtree(btreenode* bt);
/*輸出二叉樹的廣義表表示*/
btreenode* clearbtree(btreenode* bt);
/*清除二叉樹中的所有節點,使之成為一顆空樹*/
btree.c (二叉樹的介面實現)
void preorder(btreenode * bt)
}void inorder(btreenode * bt)
}void inordern(btreenode* bt)
if(top != -1)
} }void postorder(btreenode * bt)
}void levelorder(btreenode* bt)
/*當佇列非空時執行迴圈*/
while(front !- rear)
btreenode* createbtree(char *a)
if(p == null)
top++;
s[top] = p;
k = 1;
p = null;
break;
case ')':
if(top == -1)
top--;
break;
case ',':
k = 2;
break;
default:
if((a[i] >= 'a' && a[i] <= 'z' || a[i] >= 'a' && a[i] <= 'z'))
}/*為掃瞄下乙個字元修改i值*/
i++;
}return bt;
}
int btreeempty(btreenode* bt)
int btreedepth(btreenode * bt)
}char* findbtree(btreenode * bt, char x)
}}void printbtree(btreenode* bt)
}}btreenode* clearbtree(btreenode* bt)
}
btreetest.c (二叉樹運算除錯程式)
#include "btree.h"
int main(void)
二叉樹遍歷演算法
二叉樹是一種非線性的資料結構,在對它進行操作時,總是需要逐一對每個資料元素實施操作,這樣就存在乙個操作順序問題,由此提出了二叉樹的遍歷操作。所謂遍歷二叉樹就是按某種順序訪問二叉樹中的每個結點一次且僅一次的過程。這裡的訪問可以是輸出 比較 更新 檢視元素內容等等各種操作。在這裡寫了個二叉樹遍歷演算法 ...
廣度遍歷二叉樹和深度遍歷二叉樹演算法
二叉樹演算法基本和遞迴有關,前中後序演算法就不提了,主要看一下深度優先遍歷和廣度優先遍歷。實現這2種遍歷需要借助棧或者佇列來儲存中間結果,原因是遍歷過程出現了回溯。1 筆試題 廣度遍歷二叉樹 深度遍歷二叉樹 23 include4 include5 include6 7using namespace...
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...