当前位置: 首页 > 知识库问答 >
问题:

如何打印bst中祖父母是5的倍数的节点?

孙星鹏
2023-03-14

很抱歉,这是我第一次在stackoverflow中提问。我刚刚阅读了常见问题解答,知道我违反了规则。我不仅仅是在应对和粘贴问题。我使用有序遍历方法进行递归,检查节点是否是5的倍数,我不知道接下来该做什么。我应该使用标志来检查什么吗?

void findNodes(BSTNode<Key,E> *root) const
{
    if(root==NULL) return;
    else
    {
        if(root->key()%5==0)//I know it's wrong, but I don't know what to do
        {
            findNodes(root->left());
            cout<<root->key()<<" ";
            findNodes(root->right());
        }
        else
        {
            findNodes(root->left());
            findNodes(root->right());
        }

    }
}

共有3个答案

子车雅珺
2023-03-14

替换以下内容

    cout<<root->key()<<" ";

随着

    if(root->left)
    {
        if(root->left->left)
            cout<<root->left->left->key()<< " ";
        if(root->left->right)
            cout<<root->left->right->key()<< " ";
    }
    if(root->right)
    {
        if(root->right->left)
            cout<<root->right->left->key()<< " ";
        if(root->right->right)
            cout<<root->right->right->key()<< " ";

    }
曹镜
2023-03-14

试试这个:

int arr[height_of_the_tree]; //arr[10000000] if needed;

void findNodes(BSTNode<Key,E> *root,int level) const {
  if(root==NULL) return;
  arr[level] = root -> key();
  findNodes(root -> left(), level + 1);
  if(2 <= level && arr[level - 2] % 5 == 0) cout << root->key() << " ";
  findNodes(root -> right(), level + 1);
}

int main() {
  ...
  findNodes(Binary_search_tree -> root,0);
  ...
}
谷彦君
2023-03-14

打印祖父母是5的倍数的节点很复杂,因为您必须“查找”树。如果您将问题视为找到5的倍数的所有节点并打印它们的子节点,则会更容易,因为您只需沿着树往下走。

void printGrandChildren(BSTNode<Key,E> *root,int level) const{
    if(!root) return;
    if(level == 2){
         cout<<root->key()<<" ";
         return;


    }else{
        printGrandChildren(root->left(),level+1);
        printGrandChildren(root->right(),level+1);

     }

}

然后修改您的findNodes为

void findNodes(BSTNode<Key,E> *root) const
{
    if(root==NULL) return;
    else
    {
        if(root->key()%5==0)
        {
            printGrandChildren(root,0);
        }
        else
        {
            findNodes(root->left());
            findNodes(root->right());
        }

    }
}
 类似资料:
  • 问题内容: 问题是这样的:我有一个抽象类,该抽象类在其构造函数中执行某些工作,还有一组实现抽象类的子类: 然后,需要定制具体的类,一种解决方案是扩展具体的类: 但是问题在于自定义类仅需要调用抽象类的构造函数,而无需调用具体类的构造函数。 您如何实现的?更改班级关系的建议是有效的。 编辑:具体示例是ConcreteClass1和CustomizedClass1具有不同的数据集(ConcreteDat

  • 我刚刚开始使用ReactJs开发,并一直遵循serverless-stack.com教程。我已经准备好扩展应用程序并创建一个模板,带有n个子组件,但是在管理孙子组件之间的用户会话时遇到了麻烦。 我有管理用户会话的App.js。但是我在孙子组件中有我的注销按钮,我无法让它调用App.js signOut()函数。 App.js 我的布局组件有一系列不同的组件,如页眉、页脚、导航等。。 最后,我的Na

  • 接收字节数组(表示任何内容:某种有线格式、某种形式的编码数据、带有嵌入“文本”的二进制数据等)。我希望能够以以下形式打印数组: 作为十六进制字符串 作为“可打印”文本 第一种情况部分是出于调试的原因,但也可以在非调试模式下使用。第二种情况纯粹是出于调试的原因,并允许人类与其他信息源进行比较。 如果任何人有如何实现这一点的信息,我将非常感谢。

  • 我有以下BST供参考。英国夏令时 假设最小值:9 和最大值:20 它满足所有条件,对于每个节点 (X),左侧子树中的所有节点都小于,并且右侧子树中的所有节点都大于 X 的值。 我在创建打印所有值的函数(成员函数,因此它可以访问根节点)时遇到了问题。具体来说,假设我的当前节点是10,但是我仍然需要检查左右两边的子树。我不能在参数中传递节点(否则我会这样做?),所以我要实现这个功能 此外,函数应该只访

  • 给定一个未排序的节点数组,其中节点定义为: 每个节点都有自己唯一的id。< code>parent_id在树中标识其父级。问题是如何对树进行前序遍历?(不一定是二叉树) 这是一个困扰我好几天的面试问题。我能想到的是使用哈希映射<code>映射

  • 问题内容: 在我的字节数组中,我具有一条消息的 哈希 值,该值由一些负值和正值组成。使用该语句可以轻松打印正值。 现在如何获得负值? 问题答案: 好吧,如果您乐于以十进制格式打印它,则可以通过屏蔽使其变为正数: 但是,如果要打印散列,则使用十六进制会更常规。关于堆栈溢出,还有很多其他问题,这些问题将Java中的二进制数据转换为十六进制字符串。