【问题标题】:How to find the maximum size of an object in a binary tree?如何在二叉树中找到对象的最大大小?
【发布时间】:2014-06-02 00:29:33
【问题描述】:

我有一个具有以下足迹的二叉树数据结构。我正在使用 C。 Node 是一个结构体,包含

Node* left

Node* right

int key;

VECTOR data;

树是由键平衡的(例如,当前节点左侧的节点具有较低的键值),而不是数据。我想找到具有最大向量的节点。有一个函数get_size(data),但是我不知道如何递归调用一个函数来获取整个树中的最大向量大小。

【问题讨论】:

    标签: c tree find size binary-tree


    【解决方案1】:

    我会尝试一些类似的东西

    int find_max_data_size( Node * p ) {
    
      if( !p ) return 0;
    
      int const left_size = find_max_data_size( p->left );
      int const right_size = find_max_data_size( p->right );
      int const my_size = get_size( p->data );
    
      return max( left_size, right_size, my_size );
    }
    

    并致电find_max_data_size( root )

    【讨论】:

    • 我在其他地方看到过这个算法,但我认为它不起作用。如果当前节点为 NULL,我看到它通过返回 -1 完成,在这种情况下我想返回 0,还是 -1 正确。谢谢老兄。
    • @user3546030:对我来说,在两种情况下大小为 0:(1) NULL 节点,或 (2) 具有空数据的非 NULL 节点。我看不出 -1 什么时候合适。
    • 好的,谢谢。你确定这个算法会起作用吗,因为测试它我没有得到正确的数字。我完全有可能把别的东西搞砸了,因为这是一个巨大项目的一小部分。我正在打印函数中的最大值,然后打印出最大值。函数中的 printf 不加起来我放入树中的总东西。是我的问题吗?
    【解决方案2】:
    void walk(NODE_T *I__node, size_t *maxVectorSize) 
       {   
       if(I__node) 
          {
          size_t dataSize;
    
          dataSize = get_size(I__node->data, maxVectorSize);
          if(dataSize > *maxVectorSize)
             *maxVectorSize = dataSize;
    
          walk(I__node->left, maxVectorSize);
          walk(I__node->right, maxVectorSize);
          }
    
       return;
       }
    

    【讨论】:

    • 如果我在 walk 调用之间打印尺寸,我得到的尺寸与上面的答案不同。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2021-01-23
    • 2011-03-10
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多