二叉树的建立与遍历

/* -*- 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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sjiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值