二叉树中节点的级别

时间:2018-12-01 07:50:45

标签: c++ data-structures

为什么节点级别未打印?每次通话后级别都会提高?代码中的问题出在哪里?

int levelNode(struct Node* root,int a,int level){
    if(root==NULL){
        return 0;
    }
    if(root->key==a){
        return level;
    }
    levelNode(root->left,a,level+1);
    levelNode(root->right,a,level+1);
}

2 个答案:

答案 0 :(得分:1)

应该是

int levelNode(struct Node* root,int a,int level){
    int found;
    if(root==NULL){
        return 0;
    }

    if(root->key==a){
        return level;
    }

    found = levelNode(root->left,a,level+1);
    if (found != 0) return found;

    found = levelNode(root->right,a,level+1);
    if (found != 0) return found;

    return 0; 
}

答案 1 :(得分:0)

Awwww,太多递归了!只是想指出,递归绝对是邪恶的,我个人会尽可能避免它(实际上,您总是可以避免它)。

在此线程中只是有一个替代解决方案。 如果您的树已排序,则只需执行以下操作即可:

string2_1

如果您的树未排序,则可以稍微修改我的代码以进行“适当的”完整BFS。

类似这样的东西:

string2_1()string2_2(