算法与数据结构学习 11 排序二叉树

来源:互联网 发布:家庭记账软件排行 编辑:程序博客网 时间:2024/06/03 18:50

1.节点定义

struct TreeNode{int data;TreeNode *lChild;TreeNode *rChild;};
2.前序,中序,后续遍历

void PreOrder(TreeNode *&p){if (NULL == p)return;cout << p->data << ' ';PreOrder(p->lChild);PreOrder(p->rChild);}void MidOrder(TreeNode *&p){    //中序遍历即从小到大打印节点if (NULL == p)return;MidOrder(p->lChild);cout << p->data << ' ';MidOrder(p->rChild);}void PosOrder(TreeNode *&p){if (NULL == p)return;PosOrder(p->lChild);PosOrder(p->rChild);cout << p->data << ' ';}

3.节点插入

int InsertTreeNode(TreeNode *&myTree, int data){TreeNode *NewNode = new TreeNode;NewNode->data = data;NewNode->lChild = NULL;NewNode->rChild = NULL;if (myTree == NULL){//如果根节点不存在,即没有节点,把当前节点当做根节点myTree = NewNode;return 1;}else{if (data < myTree->data){InsertTreeNode(myTree->lChild, data);}else{InsertTreeNode(myTree->rChild, data);}return 1;}return 0;}

4.数组到树的转化

void BuildTree(TreeNode *&myTree, int *a, int len){for (int i = 0; i < len; i++){InsertTreeNode(myTree, a[i]);}}

5.树的高度

int CaculateHeight( TreeNode *p){if (NULL == p) return 0;int left = 0;int right = 0;left = CaculateHeight(p->lChild);right = CaculateHeight(p->rChild);return (left > right) ? (++left) : (++right);}
6.测试

void main(){//int ss[] = { 1, 6, 3, 7, 3, 5, 0 };int ss[] = { 5, 6, 7, 8, 1, 2, 3, 5, 6, 7, 8, 5, 6, 7, 8, 9 };int len = (sizeof(ss)) / (sizeof(int));TreeNode *myTree = NULL;BuildTree(myTree, ss, len);cout << CaculateHeight(myTree) << endl;PreOrder(myTree);    cout << endl;MidOrder(myTree);cout << endl;PosOrder(myTree);cout << endl;}




0 0
原创粉丝点击