关闭

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

标签: 算法structnull
2704人阅读 评论(0) 收藏 举报
分类:


二叉查找树的效率

在二叉查找树中执行的基本操作的时间与树的高度成正比。最坏情况,
树的高度是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;
               
     }
}




1
1
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

算法导论12.1什么是二叉搜索树 练习总结

12.1-1 对于关键字集合 { 1,4,5,10,16,17,21 },分别画出高度为2、3、4、5 和 6 的二叉搜索树。 ANSWER: 12.1-2 二叉搜索树性质与最小堆性质(见 6.1...
  • chan15
  • chan15
  • 2015-09-25 18:33
  • 809

算法导论第15章 动态规划-最优二叉查找树

1、前言:   接着学习动态规划方法,最优二叉查找树问题。二叉查找树参考http://www.cnblogs.com/Anker/archive/2013/01/28/2880581.html。...
  • u014627487
  • u014627487
  • 2015-01-21 16:04
  • 539

【算法导论】二叉搜索树的插入和删除

阐述二叉搜索树的插入和删除节点操作。
  • cyp331203
  • cyp331203
  • 2015-01-11 11:47
  • 1630

PAT - 甲级 - 1099. Build A Binary Search Tree (30)(二叉搜索树+层次遍历+中序遍历)

题目描述: A Binary Search Tree (BST) is recursively defined as a binary tree which has the following ...
  • qq_34594236
  • qq_34594236
  • 2017-03-30 23:13
  • 363

算法导论12.2查询二叉搜索树 练习总结

12.2-1 假设一棵二叉搜索树中的结点在 1 到 1000 之间,现在想要查找数值为 363 的结点。下面序列中哪个不是查找过的序列? a. 2, 252, 401, 398,330,344,397...
  • chan15
  • chan15
  • 2015-09-28 18:56
  • 1360

二叉搜索树的构建,遍历,查找,删除

本篇博客重点研究二叉搜索树。数据结构中为了存储和查找的方便,用各种树结构来存储文件,本章就浅谈一下各种树的表示方法、特点及各自的用途,本章设计的树结构包括:二叉搜索树(二叉查找树,二叉排序树)、平衡二...
  • Gane_Cheng
  • Gane_Cheng
  • 2016-09-23 21:49
  • 1680

二叉查找树原理分析及查找、插入、删除、遍历实现

二叉查找树作为一种最简单的二叉排序树,它是特殊的二叉树:对于二叉树,假设x为二叉树中的任意一个结点,x节点包含关键字key,节点x的key值记为key[x]。如果y是x的左子树中的一个结点,则key[...
  • miliermili
  • miliermili
  • 2014-04-08 19:29
  • 1864

根据前序遍历判断二叉搜索树

题意:给你一个二叉树的前序遍历序列,让你判断是不是二叉搜索树(左子树小于根,右子树大于根)或其镜像。如果是,输出后序遍历序列。 #include #include using namespace ...
  • Roosevelty
  • Roosevelty
  • 2016-04-09 17:15
  • 900

算法导论12.4随机构建二叉搜索树 练习总结

12.4-1 证明等式(12.3)。 ANSWER: 证明:                   ...
  • chan15
  • chan15
  • 2015-10-08 15:09
  • 1052

二叉树的递归创建,以及二叉查找树查找的建立 和遍历查找的比较

二叉树的递归创建 、以及二叉查找树查找的建立 和遍历查找的比较 (1)二叉树的递归创建和二叉树的数组表示法非常相似,可参考二叉树的数组创建 (2)二叉查找树的特性 1)每一个结点的值都...
  • liuzuyi200
  • liuzuyi200
  • 2014-04-21 17:23
  • 1527
    个人资料
    • 访问:3324683次
    • 积分:24229
    • 等级:
    • 排名:第316名
    • 原创:313篇
    • 转载:56篇
    • 译文:3篇
    • 评论:1579条
    博客专栏
    最新评论