算法导论(八)二叉查找树
来源:互联网 发布:jsp调用javascript 编辑:程序博客网 时间:2024/05/17 06:27
第12章 二叉查找树
#include <iostream>using namespace std;struct tnode{ int val; tnode* left; tnode* right; tnode* parent;};//中序遍历void inorder_tree_walk(tnode *x){ if (x != NULL) { inorder_tree_walk(x->left); cout << x->val; inorder_tree_walk(x->right); }}//递归tnode* tree_search(tnode *x, int k){ if (x == NULL || k == x->val) return x; if (k < x->val) return tree_search(x->left, k); else return tree_search(x->right, k);}//非递归tnode* iterative_tree_search(tnode* x, int k){ while (x != NULL && k != x->val) { if (k < x->val) x = x->left; else x = x->right; } return x;}tnode* tree_minimum(tnode *x){ while (x->left != NULL) { x = x->left; } return x;}tnode* tree_maxmum(tnode *x){ while (x->right != NULL) { x = x->right; } return x;}//后继的概念:大于x->val值的最小的那个结点tnode* tree_successor(tnode *x){ tnode *y; if (x->right != NULL) { return tree_minimum(x->right);//右不为空,x的后继是大于x->val的最小的那个结点 } y = x->parent; while (y != NULL && x == y->right)//直到遇到个是其父结点的左儿子的结点为止.有可能是nil,应该还算好理解 { x = y; y = y->parent; } return y;}void tree_insert(tnode *T, tnode *z){ tnode* y = NULL; tnode* x = T; while (x != NULL) { y = x; if (z->val < x->val) { x = x->left; } else x = x->right; } z->parent = y; if (y == NULL)//空树 { T = z; } else if (z->val < y->val) { y->left = z; } else y->right = z;}tnode* tree_delete(tnode *T, tnode *z){ if (z->left == NULL || z->right == NULL) { y = z; } else y = tree_successor(z);//找到后继 if (y->left != NULL)//两种情况,结合图12-2和12-4来理解,需要考虑的情况比较多 { x = y->left; } else x = y->right; if (x != NULL)//由于这个结点要被去掉,修改其子其父所需要的指向的变化 { x->parent = y->parent; } if (y->parent == NULL) { T = x; } else if (y == y->parent->left) { y->parent->left = x; } else y->parent->right = x; if (y != z)//覆盖原来的要删掉的值 { z->val = y->val; } return y;}int main(void){ return 0;}
- 算法导论(八)二叉查找树
- 算法导论学习笔记(八):二叉查找树
- 二叉查找树 (算法导论12)
- 二叉查找树(来自算法导论)
- 算法导论 二叉查找树
- 二叉查找树——删除操作(算法导论)
- 算法导论-第12章-二叉搜索(查找)树
- 《算法导论》12、二叉查找树(C++实现)
- 最优二叉查找树详解(算法导论学习笔记)
- 算法导论第十二章:二叉查找树
- 算法导论P151 二叉查找树
- 二叉查找树 算法导论笔记
- 算法导论 最优二叉查找树
- 最优二叉查找树 算法导论216
- 算法导论15.5 最优二叉查找树
- 算法导论——二叉查找树
- 算法导论--二叉查找树--C++实现
- 学习《算法导论》 二叉查找树 总结
- An incompatible version 1.1.14 of the APR based Apache Tomcat Native libra 警告
- svn 常用命令
- 中国航天科工集团与中国航天科技集团区别
- CentOS 6.0 gcc-c++
- 温州动车事故调查组专家称设备技术没问题
- 算法导论(八)二叉查找树
- linux学习心得第5篇
- CSS基础
- 使用Lua實做GUI系統的遊戲實例
- base64编解码 C语言源码
- Android开发之不同字体、不同颜色的文本、URL
- 正则表达式全部符号解释
- C文件操作
- sizeof的用法