1. 程式人生 > >二叉樹的建立與實現

二叉樹的建立與實現

#include <iostream> #include<cstdio> #include<cstdlib>

using namespace std;

typedef int TelemType;//TelemType代替int

typedef struct BinaryTreeNode {     TelemType data;     struct BinaryTreeNode *Left;     struct BinaryTreeNode *Right; }Node;//Node==struct BinaryTreeNode

//建立二叉樹,順序依次為中間節點->左子樹->右子樹 Node* createBinaryTree()//指向Node型別的指標 {     Node* p;     TelemType ch;     cin >> ch;     if (ch == 0)     //如果到了葉子節點,接下來的左、右子樹分別賦值為0     {         p = NULL;     }     else     {         p = new Node;//p = (Node*)malloc(sizeof(Node)); new分配Node型別所佔的空間         p->data = ch;         p->Left = createBinaryTree();  //遞迴建立左子樹         p->Right = createBinaryTree();  //遞迴建立右子樹     }     return p; }

//先序遍歷 void preOrderTraverse(Node* root) {     if (root)     {         cout << root->data << ' ';         preOrderTraverse(root->Left);         preOrderTraverse(root->Right);     } }

//中序遍歷 void inOrderTraverse(Node* root) {     if (root)     {         inOrderTraverse(root->Left);         cout << root->data << ' ';         inOrderTraverse(root->Right);     } }

//後序遍歷 void lastOrderTraverse(Node* root) {     if (root)     {         lastOrderTraverse(root->Left);         lastOrderTraverse(root->Right);         cout << root->data << ' ';     } }

//二叉樹節點總數目 int Nodenum(Node* root) {     if (root == NULL)     {         return 0;     }     else     {         return 1 + Nodenum(root->Left) + Nodenum(root->Right);

    } }

//二叉樹的深度 int DepthOfTree(Node* root) {     if (root)     {         return DepthOfTree(root->Left)>DepthOfTree(root->Right) ? DepthOfTree(root->Left) + 1 : DepthOfTree(root->Right) + 1;     }     if (root == NULL)     {         return 0;     } }

//二叉樹葉子節點數 int Leafnum(Node* root) {     if (!root)     {         return 0;     }     else if ((root->Left == NULL) && (root->Right == NULL))     {         return 1;     }     else     {         return  (Leafnum(root->Left) + Leafnum(root->Right));     } }

int main() {     Node *root = NULL;     root = createBinaryTree();     printf("二叉樹建立成功");     cout << endl;

    cout << "二叉樹總節點數為:" << Nodenum(root) << endl;

    cout << "二叉樹深度為:" << DepthOfTree(root) << endl;

    cout << "二叉樹葉子節點數為:" << Leafnum(root) << endl;

    cout << "前序遍歷結果:" << endl;     preOrderTraverse(root);     cout << endl;

    cout << "中序遍歷結果:" << endl;     inOrderTraverse(root);     cout << endl;

    cout << "後序遍歷結果:" << endl;     lastOrderTraverse(root);     cout << endl;

    return 0; }