二叉树的先序法创建, 先序遍历、中序遍历、后序遍历。 1. BiTree.h //------------------------------------------------------------------------------ // Copyright (c) 2009 eryar All rights reserved. // // File : BiTree.h // Author : eryar@163.com // Date : 2009-9-12 21:53 // Version : 1.0v // // Description : binary tree declaration // //============================================================================== #ifndef _BITREE_H_ #define _BITREE_H_ #include <iostream> using namespace std; typedef char ElemType; typedef struct Node{ ElemType data; struct Node* lChild; struct Node* rChild; }Node, *pNode; class BiTree{ public: BiTree(); void Create(); void PreOrder(); void InOrder(); void PostOrder(); bool Create(pNode* node); // 创建二叉树 bool PreOrderTraverse(pNode node); // 先序遍历二叉树 bool InOrderTraverse(pNode node); // 中序遍历二叉树 bool PostOrderTraverse(pNode node); // 后序遍历二叉树 bool isEmpty(); pNode itsRoot(); // 取得根节点 ~BiTree(); private: pNode root; }; #endif // _BITREE_H_ 2. BiTree.cpp //------------------------------------------------------------------------------ // Copyright (c) 2009 eryar All rights reserved. // // File : BiTree.cpp // Author : eryar@163.com // Date : 2009-9-12 22:01 // Version : 1.0v // // Description : // //============================================================================== #include "BiTree.h" /* Parameter : none Return : none Description : class default constructor : create a binary tree */ BiTree::BiTree() { //cout<<"class default constructor..."<<endl; root = NULL; } // class default constructor /* Parameter : none Return : none Description : */ pNode BiTree::itsRoot() { return root; } // itsRoot /* Parameter : Node* Return : none Description : create a binary tree */ bool BiTree::Create(pNode* node) { ElemType elem; cin>>elem; if (elem == '#') { *node = NULL; } else { *node = new Node; (*node)->data = elem; Create(&(*node)->lChild); Create(&(*node)->rChild); } return true; } // Create /* Parameter : none Return : none Description : create a binary tree */ void BiTree::Create() { Create(&root); } // Create /* Parameter : none Return : true or false Description : 先序遍历二叉树 */ bool BiTree::PreOrderTraverse(pNode node) { if (node) { cout<<"node is : "<<node->data<<endl; PreOrderTraverse(node->lChild); PreOrderTraverse(node->rChild); } return true; } // PreOrderTraverse /* Parameter : none Return : true or false Description : */ void BiTree::PreOrder() { PreOrderTraverse(root); } // PreOrder /* Parameter : none Return : true or false Description : 中序遍历二叉树 */ bool BiTree::InOrderTraverse(pNode node) { if (node) { InOrderTraverse(node->lChild); cout<<"node is : "<<node->data<<endl; InOrderTraverse(node->rChild); } return true; } // InOrderTraverse /* Parameter : none Return : none Description : */ void BiTree::InOrder() { InOrderTraverse(root); } // InOrder /* Parameter : none Return : true or false Description : 后序遍历二叉树 */ bool BiTree::PostOrderTraverse(pNode node) { if (node) { PostOrderTraverse(node->lChild); PostOrderTraverse(node->rChild); cout<<"node is : "<<node->data<<endl; } return true; } // PostOrderTraverse /* Parameter : none Return : none Description : */ void BiTree::PostOrder() { PostOrderTraverse(root); } // PostOrder /* parameter : none Return : true if is empty Description : if binary tree is empty return true */ bool BiTree::isEmpty() { if (root) { return true; } else { return false; } } // isEmpty /* Parameter : none Return : none Description : class default destructor */ BiTree::~BiTree() { //cout<<"class default destructor ..."<<endl; } // class default destructor 3. Main.cpp //------------------------------------------------------------------------------ // Copyright (c) 2009 eryar All rights reserved. // // File : main.cpp // Author : eryar@163.com // Date : 2009-9-12 21:52 // Version : 1.0v // // Description : Binary tree // //============================================================================== #include "BiTree.h" int main(int argc, char* argv[]) { BiTree tree; cout<<"先序遍历创建二叉树: "<<endl; tree.Create(); cout<<"先序遍历二叉树: "<<endl; tree.PreOrder(); cout<<"中序遍历二叉树: "<<endl; tree.InOrder(); cout<<"后序遍历二叉树: "<<endl; tree.PostOrder(); return 0; }