面试题之求二叉树的深度
题目:输入一棵二叉树的根节点。求该树的深度。从根节点到叶子结点一次经过的结点形成树的一条路径,最长路径的长度为树的深度。根节点的深度为1。
struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight; };假设一棵树仅仅有一个结点。它的深度为1。假设根结点仅仅有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;相同假设根结点仅仅有右子树而没有左子树。那么树的深度应该是其右子树的深度加1。
假设既有右子树又有左子树。那该树的深度就是其左、右子树深度的较大值再加1。
基于以上思路,用递归代码将很easy,详细例如以下:
//递归求深度 int TreeDepth(BinaryTreeNode *pRoot) { if (pRoot==NULL) return 0; //左子树深度 int nleft=TreeDepth(pRoot->m_pLeft); //右子树深度 int nRight=TreeDepth(pRoot->m_pRight); //返回深度大的子树深度加1 return (nleft>nRight)?(nleft+1):(nRight+1); }