二叉树的建立与遍历

来源:互联网 发布:熟悉linux内核 编辑:程序博客网 时间:2024/05/16 06:29
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- *//* * main.cc * Copyright (C) archermind 2012 <archermind@> *  */#include <iostream>using namespace std;//获取数组长度template <class T>int getArrayLen(T& array){return (sizeof(array) / sizeof(array[0]));}//打印数组元素void printArrayVal(int values[],int index){cout<< "values["<<index<<"]:"<<values[index]<<endl;}//节点struct BSTreeNode{    int m_nValue; // value of node    BSTreeNode *m_pLeft; // left child of node    BSTreeNode *m_pRight; // right child of node};//添加节点到二叉树void addNode(BSTreeNode* &pCurrentNode,int value){if (pCurrentNode == NULL) {BSTreeNode *node = new BSTreeNode();node->m_pLeft = NULL;node->m_pRight = NULL;node->m_nValue = value;pCurrentNode = node;}else if ((pCurrentNode->m_nValue)>value) {addNode(pCurrentNode->m_pLeft,value);}else if((pCurrentNode->m_nValue)<value){addNode(pCurrentNode->m_pRight,value);}else {cout<<"value exist!"<<endl;}}//初始化二叉树void initBSTree(BSTreeNode* root,int values[],int length){for (int i=1;i< length; i++) {addNode(root,values[i]);}}//先根遍历 void preOrderTraverse(BSTreeNode* T)  {  if(T){    cout<<T->m_nValue<<endl;  preOrderTraverse(T->m_pLeft);    preOrderTraverse(T->m_pRight);  }  }//中根遍历 void inOrderTraverse(BSTreeNode* T)  {  if(T){    inOrderTraverse(T->m_pLeft);    cout<<T->m_nValue<<endl;  inOrderTraverse(T->m_pRight);  }  }//后根遍历void postOrderTraverse(BSTreeNode* T)  {  if(T){    postOrderTraverse(T->m_pLeft);    postOrderTraverse(T->m_pRight);    cout<<T->m_nValue<<endl;}  }int main(){int vals[] = {10,4,12,6,8,14,16,15};int length = getArrayLen(vals);BSTreeNode* root  = new BSTreeNode();root->m_pLeft = NULL;root->m_pRight = NULL;root->m_nValue = 10;initBSTree(root,vals,length);preOrderTraverse(root);inOrderTraverse(root);postOrderTraverse(root);return 0;}


原创粉丝点击