《算法导论》第12章 二叉查找树 (1)遍历

原创 2012年03月24日 22:49:46


二叉查找树的效率

在二叉查找树中执行的基本操作的时间与树的高度成正比。最坏情况,
树的高度是N,像链表一样,而较好情况高度是lgN。因此,树的高度是关键。
下一章将要学习的红黑树是对二叉查找树的改进,通过保持树的高度从而
保证红黑树上的操作有很好的效率。


各种遍历算法

中序遍历算法:子树根的关键字在输出时介于左子树和右子树的关键字之间。
即按排列顺序输出树中的所有关键字。

相应的,前序遍历就是子树根的关键字在左右子树之前输出。
在后面的基数树中,前序遍历(而非中序遍历)是二进制串的排序输出。

用递归方式可以很轻松地实现二叉树的遍历。

// 包含卫星数据的二叉树结点定义
struct _BSTNode {
     struct _BSTNode *parent, *left, *right;    
     int key;    
     char *value;
};

typedef struct _BSTNode BSTNode;

// 中序遍历
void bst_inorder_walk(BSTNode *node)
{
     if (node != NULL) {
          bst_inorder_walk(node->left);
          printf("key: %d, val: %s\n", node->key, node->value);
          bst_inorder_walk(node->right);
     }         
}


非递归实现中序遍历

沿着二叉树的最左结点遍历,逐个入栈,到最左结点后开始出栈。
打印弹出栈的结点的值,并以该结点的右孩子为根结点,继续沿其最左结点处理。

void bst_inorder_walk(BSTNode *node)
{
     BSTNode *stack[20];
     int top = 0;     

     while (node || top != 0) {     
          // Push most-left children to stack
          while (node) {
               stack[top++] = node;
               node = node->left;
          }

          // Print and continue to handle right child
          node = stack[--top];
          printf("%d, %s\n", node->key, node->value);
          node = node->right;
               
     }
}




版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问 http://blog.csdn.net/dc_726

相关文章推荐

算法导论 第12章 二叉查找树

一、概念 1.定义与性质 (1)设x为二叉查找树中的一个结点,若y是x左子树中的一个结点,则key[y] (2)二叉查找树上执行的基本操作的时间与树的高度成正比。 2.结构 (1)结点结构: 关键字...

《算法导论》读书笔记之第12章 二叉查找树

摘要:   本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。...

算法导论 第12章 二叉查找树

二叉查找树的概念和性质        二叉查找树(Binary Search Tree)是这样的一棵树:设节点x的左右孩子分别为y,z,那么key[x] = key[x],而它的以y和z分别为根的左右...

二叉查找树——算法导论第12章简易代码实现~

本文对《算法导论》第12章二叉查找树的具体实现代码:   #ifndef _BINARY_SEARCH_TREE #define _BINARY_SEARCH_TREE typedef s...

算法导论 第12章 二叉查找树

二叉查找树是一种树数据结构,它与普通的二叉树最大的不同就是二叉查找树满足一个性质:对于树中的任意一个节点,均有其左子树中的所有节点的关键字值都不大于该节点的关键字值,其右子树中的任意一个节点的关键字值...

《算法导论》第12章 二叉查找树 (2)查找、插入与删除

1. 查找 利用二叉查找树左小右大的性质,可以很容易实现查找任意值和最大/小值。 BSTNode * bst_search(BSTNode *node, int key) { ...
  • dc_726
  • dc_726
  • 2012年03月25日 11:48
  • 6893

《算法导论》第12章 二叉查找树

摘要:   本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二...

《算法导论》笔记 第12章 12.2 查询二叉查找树

【笔记】 【练习】
  • cyendra
  • cyendra
  • 2014年04月18日 12:06
  • 668

《算法导论》第12章 二叉查找树 (3)基数树

基数树与二叉查找树和Trie树很相似。它像BST一样是二叉的,向左表示0而不是BST的小于, 而向右则表示1而不是大于。它像Trie一样共享相同的结点来保存字符串中相同的前缀,从而 节省了空间,但...
  • dc_726
  • dc_726
  • 2012年03月25日 13:38
  • 5895

算法导论-12-1-具有相同关键字元素的二叉查找树

题目: 相同关键字的存在,给二叉查找树的实现带来了一些问题。 a)当用TREE-INSERT将n个具有相同关键字的数据项插入到一棵初始为空的二叉查找树中时,该算法的渐近性能如何? 我们可以对TR...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《算法导论》第12章 二叉查找树 (1)遍历
举报原因:
原因补充:

(最多只允许输入30个字)