void LRDTree(CBTType *treeNode,void(*TreeNodeData)(CBTType *p)) //后序遍历 { if(treeNode) { LRDTree(treeNode->left,TreeNodeData); LRDTree(treeNode->right,TreeNodeData); TreeNodeData(treeNode); } }
int main(int argc, char ** argv) { treeNode * root = createTree(); if (!root) return -1; printf("\n------------------\n"); LDRTree(root); printf("\n------------------\n"); DLRTree(root); printf("\n------------------\n"); LRDTree(root); printf("\n叶子结点个数 %d\n", leafnum(root)); printf("\n二叉树层高 %d\n", getMaxLevel(root)); showTree(root); return 0; }
void main() { CBTType *root=NULL; char menusel; void (*TreeNodeData1)(CBTType *p); TreeNodeData1=TreeNodeData; root = InitTree(); do{ printf("请选择菜单添加二叉树的节点\n"); printf("0.退出\t"); printf("1.添加二叉树的节点\n"); menusel = getch(); switch(menusel) { case '1': AddTreeNode(root); break; case '0': break; default: ; } }while(menusel != '0'); do{ printf("请选择菜单遍历二叉树,输入0表示退出:\n"); printf("1.先序遍历DLR\t"); printf("2.中序遍历LDR\n"); printf("3.后序遍历LRD\t"); printf("4.按层遍历\n"); menusel = getch(); switch(menusel) { case '0': break; case '1': printf("\n 先序遍历DLR的结果:"); DLRTree(root,TreeNodeData1); printf("\n"); break; case '2': printf("\n中序遍历LDR的结果:"); LDRTree(root,TreeNodeData1); printf("\n"); break; case '3': printf("\n 后序遍历LRD的结果:"); LRDTree(root,TreeNodeData1); printf("\n"); break; case '4': printf("\n 按层遍历的结果:"); LevelTree(root,TreeNodeData1); printf("\n"); break; default: ; } }while(menusel != '0'); printf("\n 二叉树深度为:%d \n",TreeDepth(root)); ClearTree(root); root = NULL; }