码迷,mamicode.com
首页 > 其他好文 > 详细

104.Maximum Depth of Binary Tree

时间:2015-01-30 09:10:56      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:

Given a binary tree, findits maximum depth.

The maximum depth is thenumber of nodes along the longest path from the root node down to the farthestleaf node.

 

可用递归,效率低。

这里用类似层次遍历的算法。设置一个队列和两个int变量thiscountnextcount

初始thiscount=1nextcount=0分别表示当前层待遍历的节点数和下一层待遍历的节点数。

遍历时根据有几个孩子递增nextcount而递减thiscount,将孩子push入队列。当thiscount==0时,一层遍历完毕,thiscount=nextcountnextcount=0,同时depth+1.继续下一层的遍历,队列为空时退出。

注意当root节点为空时要返回0.


#pragma once
#include<queue>
#include<iostream>
using namespace std;

struct TreeNode {
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};


int maxDepth(TreeNode *root) {
	queue<TreeNode*> q;
	TreeNode* temp;
	q.push(root);
	int thiscount = 1;//q中当前这一层待遍历节点的数量
	int nextcount = 0;//q中下一层待遍历的节点的数量
	int depth = 0;
	while (!q.empty())
	{
		if (!root)
			return 0;//空树,返回0
		temp = q.front();
		q.pop();
		thiscount--;
		if (temp->left)
		{
			q.push(temp->left);
			nextcount++;
		}
		if (temp->right)
		{
			q.push(temp->right);
			nextcount++;
		}
		if (thiscount == 0)//该层遍历完毕
		{
			thiscount = nextcount;
			nextcount = 0;
			depth++;
		}
	}
	return depth;
}

void main()
{
	TreeNode *t1 = new TreeNode(1);
	TreeNode *t2 = new TreeNode(2);
	TreeNode *t3 = new TreeNode(3);
	TreeNode *t4 = new TreeNode(4);
	TreeNode *t5 = new TreeNode(5);
	TreeNode *t6 = new TreeNode(6);
	TreeNode *t7 = new TreeNode(7);
	TreeNode *t8 = new TreeNode(8);
	TreeNode *t9 = NULL;

	t1->left = t2;
	t1->right= t3;
	t3->left = t4;
	t4->left = t5;
	t4->right = t6;
	t6->left = t7;

	t7->left = t8;

	cout << maxDepth(t1) << endl;
	system("pause");

}


104.Maximum Depth of Binary Tree

标签:

原文地址:http://blog.csdn.net/hgqqtql/article/details/43278699

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!