1. 程式人生 > >二叉樹的建立與遍歷(一)(c++實現)

二叉樹的建立與遍歷(一)(c++實現)

【目標】

建立如下所示的一棵二叉樹,並且輸出其對應的前序遍歷、中序遍歷、後序遍歷。
這裡寫圖片描述

【程式碼實現】

建立二叉樹以及實現遍歷的操作存放在Binarytree.h檔案中

//Binarytree.h
#ifndef Binarytree_H
#define Binarytree_H
template<class T> class Binarytree;
template<class T>
class TreeNode
{
    friend class Binarytree<T>;
private:
    T data;
    TreeNode<
T> *rchild; //右指標指向右子樹 TreeNode<T> *lchild; //左指標指向左子樹 }; template<class T> class Binarytree { public: Binarytree(){root=0;}; void CreatTree(); //根據實際情況建立二叉樹 void Preorder(); void Preorder(TreeNode<T> *currentnode); //前序遍歷 void Inorder(); void Inorder(TreeNode<
T> *currentnode); //中序遍歷 void Postorder(); void Postorder(TreeNode<T> *currentnode); //後序遍歷 private: TreeNode<T> *root; }; //-------建立二叉樹-------- template<class T> void Binarytree<T>::CreatTree() { TreeNode<T> *p1=new TreeNode<T>(); p1->data='A'; p1->
rchild=0; p1->lchild=0; root=p1; TreeNode<T> *p2=new TreeNode<T>(); p2->data='B'; p2->rchild=0; p2->lchild=0; root->lchild=p2; TreeNode<T> *p3=new TreeNode<T>(); p3->data='C'; p3->rchild=0; p3->lchild=0; root->rchild=p3; TreeNode<T> *p4=new TreeNode<T>(); p4->data='D'; p4->rchild=0; p4->lchild=0; root->lchild->lchild=p4; TreeNode<T> *p5=new TreeNode<T>(); p5->data='E'; p5->rchild=0; p5->lchild=0; root->lchild->rchild=p5; TreeNode<T> *p6=new TreeNode<T>(); p6->data='F'; p6->rchild=0; p6->lchild=0; root->rchild->lchild=p6; TreeNode<T> *p7=new TreeNode<T>(); p7->data='G'; p7->rchild=0; p7->lchild=0; root->rchild->rchild=p7; TreeNode<T> *p8=new TreeNode<T>(); p8->data='H'; p8->rchild=0; p8->lchild=0; root->lchild->lchild->lchild=p8; TreeNode<T> *p9=new TreeNode<T>(); p9->data='I'; p9->rchild=0; p9->lchild=0; root->lchild->lchild->rchild=p9; } //------遞迴實現二叉樹的前序遍歷------ template<class T> void Binarytree<T>::Preorder() { cout<<"前序遍歷(根->左->右)為:"; Preorder(root); } template<class T> void Binarytree<T>::Preorder(TreeNode<T> *currentnode) { if(currentnode) { cout<<currentnode->data<<" "; Preorder(currentnode->lchild); Preorder(currentnode->rchild); } } //------遞迴實現二叉樹的中序遍歷------ template<class T> void Binarytree<T>::Inorder() { cout<<"中序遍歷(左->根->右)為:"; Inorder(root); } template<class T> void Binarytree<T>::Inorder(TreeNode<T> *currentnode) { if(currentnode) { Inorder(currentnode->lchild); cout<<currentnode->data<<" "; Inorder(currentnode->rchild); } } //------遞迴實現二叉樹的後序遍歷------ template<class T> void Binarytree<T>::Postorder() { cout<<"後序遍歷(左->右->根)為:"; Postorder(root); } template<class T> void Binarytree<T>::Postorder(TreeNode<T> *currentnode) { if(currentnode) { Postorder(currentnode->lchild); Postorder(currentnode->rchild); cout<<currentnode->data<<" "; } } #endif

主程式:

//main.cpp
#include "Binarytree.h"
#include <iostream>
using namespace std;
int main()
{
  Binarytree<char> Tree1;
  Tree1.CreatTree();
  Tree1.Preorder();
  cout<<endl;
  Tree1.Inorder();
  cout<<endl;
  Tree1.Postorder();
  cout<<endl;
  system("pause");
  return 0;
}

【結果圖】

這裡寫圖片描述