关于计算二叉树深度

597 阅读1分钟

树结构体定义

typedef char TElemType;

typedef struct BiTNode
{
    TElemType data;
    struct BiTNode *lchild;
    struct BiTNode *rchild;
}BiTNode,*BiTree;

先给出求树深度的代码

int TreeDeep(BiTree T)
{
    int deep = 0;
    int leftdeep = 0;
    int rightdeep = 0;
    if(T)
    {
        leftdeep = TreeDeep(T->lchild);
        rightdeep = TreeDeep(T->rchild);
        deep = leftdeep>=rightdeep ? leftdeep+1 : rightdeep+1;
    }
    return deep;
}

接下来进行解释

我们可以从根节点即左右子树来理解二叉树的深度。对于任意一棵非空二叉树,有如下四种情况:

  • 如果一颗树只有一个节点,它的深度是1;

  • 如果根节点只有左子树而没有右子树,那么二叉树的深度应该是其左子树的深度加1;

  • 如果根节点只有右子树而没有左子树,那么二叉树的深度应该是其右树的深度加1;

  • 如果根节点既有左子树又有右子树,那么二叉树的深度应该是其左右子树的深度较大值加1;

关于递归

关于递归,我们不应该关心这个递归有多深,它是怎么样进行的,我们应该关心的是我们需要递归后的结果是什么,而不是关注递归本身