二叉排序树的创建,插入,遍历

二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树:
①若它的左子树非空,则左子树上所有结点的值均小于根结点的值;
②若它的右子树非空,则右子树上所有结点的值均大于根结点的值;
③左、右子树本身又各是一棵二叉排序树。

 

实现

#include "stdafx.h" #include "stdlib.h" struct BSTreeNode{ int m_nValue; BSTreeNode* m_pLeft; BSTreeNode* m_pRight; }; //二叉排序树的插入 BSTreeNode* BSTreeInsert(BSTreeNode* pTreeHeader, BSTreeNode* pInsertNode) { if(pTreeHeader == NULL) return pInsertNode; // 注意 这里返回插入的元素 BSTreeNode* pCurrent = pTreeHeader; // insert into left tree if(pInsertNode->m_nValue < pCurrent->m_nValue) pCurrent->m_pLeft = BSTreeInsert(pCurrent->m_pLeft, pInsertNode); // insert into the right tree else if(pInsertNode->m_nValue >= pCurrent->m_nValue) pCurrent->m_pRight = BSTreeInsert(pCurrent->m_pRight, pInsertNode); return pCurrent; //注意这里返回Header } BSTreeNode* CreateBSTree() { BSTreeNode* pHeader = (BSTreeNode*)malloc(sizeof(BSTreeNode)); pHeader->m_nValue = 3; pHeader->m_pLeft = NULL; pHeader->m_pRight = NULL; for(int i=0; i<5; i++) { BSTreeNode* pNode = (BSTreeNode*)malloc(sizeof(BSTreeNode)); pNode->m_nValue = i; pNode->m_pLeft = NULL; pNode->m_pRight = NULL; BSTreeInsert(pHeader, pNode); } return pHeader; } //中序遍历二叉树 等于排序 void InOrderAndDisplay(BSTreeNode* pTreeHeader) { BSTreeNode* pCurrent = pTreeHeader; if(pCurrent->m_pLeft != NULL) InOrderAndDisplay(pCurrent->m_pLeft); printf("%d/n", pCurrent->m_nValue); if(pCurrent->m_pRight != NULL) InOrderAndDisplay(pCurrent->m_pRight); } int _tmain(int argc, _TCHAR* argv[]) { BSTreeNode* pTreeHeader = CreateBSTree(); InOrderAndDisplay(pTreeHeader); return 0; }

你可能感兴趣的:(struct,tree,header,null,search,insert)