二叉树深度应该怎么算

 


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;      //返回
 }