class Solution {
public:
int maxDepth(treenode *root)
{
if (!root) return 0;
int lh = maxDepth(root->left);
int rh = maxDepth(root->right);
return lh > rh ? lh + 1 : rh + 1;
}
};
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
上面的老师给得是 递归做法 那我来一个非递归
//深度 非递归
int h(struct node*root)
{
struct node*a[20];
struct node*pnode=root;
int i=-1;
int h=0; //初始化 深度
struct node*x=NULL; //标记
while(pnode)
{
a[++i]=pnode; //入栈
pnode=pnode->left;
}
while(i!=-1)
{
pnode=a[i--]; //出栈
if(pnode->right==NULL || pnode->right==x) //只要 节点 的右边为空 或者 被标记
{
//printf("%3d:%s",pnode->data.a,pnode->data.a1); 后续遍历--打印 当前节点的值
x=pnode; // 把 当前节点 标记
}
else
{
a[++i]=pnode; // 入栈
pnode=pnode->right;
while(pnode)
{
a[++i]=pnode; //重复 节点向左的动作
pnode=pnode->left;
}
if(i>h) // 当 节点的上一个循环(节点无路可走时 结构体数组的 下标为当前 最大)
h=i;
}
}
return h; //返回
}