二叉查找数C++ 数组模拟二叉树及面向对象实现

来源:互联网 发布:淘宝一键开店 编辑:程序博客网 时间:2024/06/06 12:58

数组实现

#include "stdafx.h"#include <iostream>using namespace std;#define iArrSize sizeof(iArr)/sizeof(iArr[0])void inertValue(int *iBinTree, int iNode, int iValue){if (iBinTree[iNode] == 0){//默认设定不对0插入iBinTree[iNode] = iValue;}else{if (iBinTree[iNode] > iValue){inertValue(iBinTree,iNode * 2 + 2,iValue);}else if (iBinTree[iNode] < iValue){inertValue(iBinTree,iNode * 2 + 1,iValue);}else return;//不插入已经存在的节点}////非递归方法//while(iNode < 10000){//if (iBinTree[iNode] == 0){//默认设定不对0插入//iBinTree[iNode] = iValue;//return;//}//if (iBinTree[iNode] > iValue){//iNode = iNode * 2 + 2;//}else if (iBinTree[iNode] < iValue){//iNode = iNode * 2 + 1;//}else return;//不插入已经存在的节点//}return ;}void printRs(int *iArr,int iNode){if (iArr[iNode] != 0){//默认设定不对0插入printRs(iArr,iNode * 2 + 1);cout<<iArr[iNode]<<" ";printRs(iArr,iNode * 2 + 2);}return;}int main(){int iArr[] = {9,10,200,3,400,12,-1};int iArrRs[iArrSize+10000];memset(iArrRs,0,iArrSize + 10000);for (int i = 0;i<iArrSize; i++){inertValue(iArrRs,0,iArr[i]);}//中序遍历printRs(iArrRs,0);cout<<endl;return 0;}


面向对象实现

#include "stdafx.h"#include <iostream>#include <stack>using namespace std;#define iArrSize sizeof(iArr)/sizeof(iArr[0])class Node{public :Node *leftNode;Node *rightNode;int iNodeValue;Node(){iNodeValue = 0;this->leftNode = NULL;this->rightNode = NULL;}Node(int iNodeValue, Node *leftNode, Node *rightNode){this->iNodeValue = iNodeValue;this->leftNode = leftNode;this->rightNode = rightNode;}};void insertValue(Node *nodeTree,int iValue){////递归实现//if (nodeTree == NULL){//nodeTree = new Node(iValue,NULL,NULL);//}else{//if (nodeTree->iNodeValue > iValue){//if(nodeTree->rightNode == NULL){//Node *nodeTemp = new Node(iValue,NULL,NULL);//nodeTree->rightNode = nodeTemp;//}else {//insertValue(nodeTree->rightNode,iValue);//}//}else if (nodeTree->iNodeValue < iValue){//if(nodeTree->leftNode == NULL){//Node *nodeTemp = new Node(iValue,NULL,NULL);//nodeTree->leftNode = nodeTemp;//}else {//insertValue(nodeTree->leftNode,iValue);//}//}else return;//相等不插入//}//非递归实现Node *nodeTemp = nodeTree;while(nodeTree != NULL){nodeTemp = nodeTree;if (nodeTree->iNodeValue >iValue) nodeTree = nodeTree->rightNode;else if (nodeTree->iNodeValue <iValue) nodeTree = nodeTree->leftNode;else return;}Node *node = new Node(iValue,NULL,NULL);if (nodeTemp->iNodeValue > iValue) nodeTemp->rightNode = node;else nodeTemp->leftNode = node;return;}//中序遍历void printRs(Node *tree){//if (NULL != tree){//递归实现//printRs(tree->leftNode);//cout<<tree->iNodeValue<<" ";//printRs(tree->rightNode);//}//非递归实现//栈存节点stack<Node*> sNode;Node *pNode = tree;while( pNode != NULL || !sNode.empty()){while( pNode != NULL){sNode.push(pNode);pNode = pNode->leftNode;}if (!sNode.empty()){pNode = sNode.top();cout<<pNode->iNodeValue<<" ";sNode.pop();pNode = pNode->rightNode;}}cout<<endl;return;}int main(){int iArr[] = {9,10,200,3,400,12,-1};Node nodeRs;for (int i = 0;i<iArrSize; i++){insertValue(&nodeRs,iArr[i]);}//中序遍历printRs(&nodeRs);cout<<endl;return 0;}


原创粉丝点击