2017百度面试现场coding算法二

二、求树中所有节点的深度和
其中树是多叉的,每个节点保存的是指向孩子和兄弟的指针,根节点的深度为1,依次第二层的深度都为二,以此类推

struct TreeNode//结构体
{
    TreeNode* first_child;
    TreeNode* next_sibling;
    TreeNode():first_child(NULL),next_sibling(NULL){}
};
int depth1(TreeNode* pNode,int &depth)
{
    if(pNode==NULL)
        return depth;
    int child=0,sibling=0;
    if(pNode->next_sibling!=NULL)
        sibling=depth1(pNode->next_sibling, depth);
    if(pNode->first_child!=NULL)
    {   int d=depth+1;
        child=depth1(pNode->first_child, d);}
    return (depth)+child+sibling;//当前的节点深度+孩子的节点深度+右兄弟的节点深度和
}
int depth(TreeNode* root)//主函数
{
    if(root==NULL)
        return 0;
    int depth=1;
    depth=depth1(root, depth);//调用函数
    return depth;
}

你可能感兴趣的:(面试总结)