企业如何做好网站建设,东莞关键词排名推广,wordpress下载最新,同ip多域名做同行业网站目录
树结构及其算法-二叉排序树
C代码 树结构及其算法-二叉排序树
事实上#xff0c;二叉树是一种很好的排序应用模式#xff0c;因为在建立二叉树的同时#xff0c;数据已经经过初步的比较#xff0c;并按照二叉树的建立规则来存放数据#xff0c;规则如下#xff1…目录
树结构及其算法-二叉排序树
C代码 树结构及其算法-二叉排序树
事实上二叉树是一种很好的排序应用模式因为在建立二叉树的同时数据已经经过初步的比较并按照二叉树的建立规则来存放数据规则如下
第一个输入数据当作此二叉树的树根。之后的数据以递归的方式与树根进行比较小于树根置于左子树大于树根置于右子树。
从上面的规则可以知道左子树内的值一定小于树根而右子树的值一定大于树根。因此只要利用中序遍历方式就可以得到从小到大排序好的数据如果想从大到小排序那么可将最后的结果置于堆栈内再依次弹出即可。
C代码
#includeiostream
using namespace std;struct TreeNode {int data;TreeNode* leftNode;TreeNode* rightNode;TreeNode() {data 0;leftNode nullptr;rightNode nullptr;}TreeNode(int tempData, TreeNode* tempLeftNode nullptr, TreeNode* tempRightNode nullptr) {this-data tempData;this-leftNode tempLeftNode;this-rightNode tempRightNode;}
};namespace Tree {TreeNode* CreateTree(int* tempData, int tempSize) {TreeNode* tempTreeNode nullptr;for (int i 0; i tempSize; i) {TreeNode* currentNode;TreeNode* newNode;int flag 0;newNode new TreeNode(tempData[i]);if (tempTreeNode nullptr)tempTreeNode newNode;else {currentNode tempTreeNode;while (!flag) {if (tempData[i] currentNode-data) {if (currentNode-leftNode nullptr) {currentNode-leftNode newNode;flag 1;}elsecurrentNode currentNode-leftNode;}else {if (currentNode-rightNode nullptr) {currentNode-rightNode newNode;flag 1;}elsecurrentNode currentNode-rightNode;}}}}return tempTreeNode;}void Inorder(TreeNode* tempTree) {if (tempTree ! nullptr) {Inorder(tempTree-leftNode);cout tempTree-data ;Inorder(tempTree-rightNode);}}
};int main() {int data[]{ 6, 3, 5, 9, 7, 8, 4, 2 };cout 原始数据 endl;for (int i 0; i 8; i)cout data[i] ;cout endl;TreeNode* treeNode nullptr;treeNode Tree::CreateTree(data, 8);cout 排序结果 endl;Tree::Inorder(treeNode);return 0;
}
输出结果