树的深度

题目链接: https://www.nowcoder.com/practice/435fb86331474282a3499955f0a41e8b?tpId=13&tqId=11191&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey.
C++


BFS求树的深度

基本思路

BFS:从根节点开始,沿着树的宽度遍历节点,直到所有节点被遍历完为止。
在BFS过程中,通过判断当前层是否还有节点,从而来实现层数的计数,进而得到树的深度。

代码

int BFS(TreeNode* pRoot){
			if(pRoot==NULL) return 0;
			int level=0;
			queue<TreeNode*> nodeQ;
			nodeQ.push(pRoot);
			while(!nodeQ.empty()){
				int count=nodeQ.size();
				for(int i=0;i<count;i++){
					TreeNode* p=nodeQ.front();
					nodeQ.pop();
					if(p->left!=NULL) nodeQ.push(p->left);
					if(p->right!=NULL) nodeQ.push(p->right);
				}
				level++;
			}
			return level;
		}

BFS遍历求深度 使用队列,先将根节点入队,然后出队(队列中元素全部出队),深度加1,然后将出队节点的所有相邻节点入队(队列中保存下一层的所有节点)。所以每次出队的时候,要把队列中所有节点出队(当前层所有节点出队),然后层数加1,同时,再把当前层节点的下一层的结点全部入队,用于下一层的判断。

分治法

基本思想

要求树Tree的深度,可以分成两部分来求,先求出左子树的深度和右子树的深度,然后取左子树和右子树的中的大值maxLevel,最后maxLevel+1即为树Tree的深度。

代码

int TreeDepth(TreeNode* pRoot) {
			if(pRoot==NULL) return 0;
			return max(TreeDepth(pRoot->left),TreeDepth(pRoot->right))+1;
		} 

分治法求深度 先求出左子树的深度和右子树的深度,然后取max(左子树深度,右子树深度)+1即为树的深度。

总结

要理解树的各种遍历的特点,然后根据问题选择合适的遍历方式解决问题。分治法求树的深度,倒是没有马上想到,还需加强算法的理解。编程路上,砥砺前行~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值