1. 程式人生 > 其它 >二叉樹基本操作

二叉樹基本操作

技術標籤:資料結構資料結構二叉樹

二叉樹基礎操作

求二叉樹的建立、遍歷、葉子結點個數、樹的深度

// 先序序列ABC##DE#G##F###
#include <iostream>
#include <cstdlib>

using namespace std;
typedef char ElemType;

typedef struct BitNode{
    ElemType data;
    struct BitNode *lchild, *rchild;
}BitNode,*BitTree;

void CreateBitTree(BitTree *T)
; bool PreTravellers(BitTree T); bool InTravellers(BitTree T); bool PostTravellers(BitTree T); int CountLeaf(BitTree T); int CountLevel(BitTree T); int main() { BitTree T = NULL; // 約定按先序遍歷輸入二叉樹 CreateBitTree(&T); cout << "The PreOrder: "; // 先序遍歷二叉樹 PreTravellers
(T); cout << endl << "The InOreder: "; // 中序遍歷二叉樹 InTravellers(T); cout << endl << "The PostOrder; "; // 後序遍歷二叉樹 PostTravellers(T); cout << endl; // 求二叉樹中的葉子結點個數 cout << "The leaf num: " << CountLeaf
(T) << endl; // 求當前二叉樹的深度 cout << "The BitTree degree is : " << CountLevel(T) << endl; return 0; } // 前序遍歷輸入二叉樹 void CreateBitTree(BitTree *T) { ElemType ch; cin >> ch; if(ch == '#') { (*T) = NULL; } else { (*T) = new BitNode; (*T)->data = ch; CreateBitTree(&(*T)->lchild); CreateBitTree(&(*T)->rchild); } } // 先序遍歷二叉樹 bool PreTravellers(BitTree T) { if(T != NULL) { cout << T->data << ' '; PreTravellers(T->lchild); PreTravellers(T->rchild); } return true; } // 中序遍歷二叉樹 bool InTravellers(BitTree T) { if(T != NULL) { InTravellers(T->lchild); cout << T->data << ' '; InTravellers(T->rchild); } return true; } // 後序遍歷二叉樹 bool PostTravellers(BitTree T) { if(T != NULL) { PostTravellers(T->lchild); PostTravellers(T->rchild); cout << T->data << ' '; } return true; } // 求二叉樹葉子節點個數 int CountLeaf(BitTree T) { int count; if(T == NULL) count = 0; else if(T->lchild == NULL && T->rchild == NULL) count = 1; else count = CountLeaf(T->lchild) + CountLeaf(T->rchild); return count; } // 求當前二叉樹的深度 int CountLevel(BitTree T) { if(T == NULL) return 0; int ldp = CountLevel(T->lchild); int rdp = CountLevel(T->rchild); return (ldp>rdp?ldp+1:rdp+1); }