首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新人求解一路数据C++结构算法题目

2013-11-29 
新人求解一道数据C++结构算法题目写一个递归函数smallcount,传入一棵二叉检索树和值K,返回值小于或等于K的

新人求解一道数据C++结构算法题目
写一个递归函数smallcount,传入一棵二叉检索树和值K,返回值小于或等于K的结点数目。
  想了半天没头绪,求算法和大神详细解释,!!!!
[解决办法]
递归。

#include <iostream>

struct tree_node
{
  int elem_;
  tree_node *left_;
  tree_node *right_;
};

tree_node* insert(tree_node *node, int e)
{
  if (!node)
  {
    node = new tree_node;
    node->elem_ = e;
    node->left_ = node->right_ = NULL;
  }
  else if (node->elem_ > e)
    node->left_ = insert(node->left_, e);
  else if (node->elem_ < e)
    node->right_ = insert(node->right_, e);

  return node;
}

int count_less_than_k(tree_node *root, int k)
{
  if (!root)
    return 0;

  int cnt = count_less_than_k(root->left_, k);
  if (root->elem_ <= k)
  {
    cnt++;
    cnt += count_less_than_k(root->right_, k);
  }
  return cnt;
}


int main()
{
  tree_node *root = NULL;
  for (int i = 1; i< 10; i++)
    root = insert(root, i);

  for (int i = 0; i < 10; i++)
    std::cout << "less than " << i << " cnt: " << count_less_than_k(root, i) << std::endl;

  return 0;
}


[coderchen@self c++]$ ./a.out
1 2 3 4 5 6 7 8 9
less than 0 cnt: 0
less than 1 cnt: 1
less than 2 cnt: 2
less than 3 cnt: 3
less than 4 cnt: 4
less than 5 cnt: 5
less than 6 cnt: 6
less than 7 cnt: 7
less than 8 cnt: 8
less than 9 cnt: 9

[解决办法]
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出

热点排行