您的位置:首页 > 其它

二叉树的节点个数和深度(非递归)

2015-09-11 10:50 381 查看
二叉树的节点个数

代码实现

int count_tree(TreeNode *bt)
{
	int count = 0;
	if(NULL == bt){
		//cout<<"tree is empty\n";
		return 0;
	}
	queue<TreeNode *> que;
	que.push(bt);
	while(!que.empty()){
		bt = que.front();
		que.pop();
		count++;
		//print(bt->data);
		if(bt->lchild)
			que.push(bt->lchild);
		if(bt->rchild)
			que.push(bt->rchild);
	}
	return count;
}


二叉树的深度

代码实现
int depth_tree(TreeNode *bt)
{
	int depth = 0,count = 0;
	if(NULL == bt){
		cout<<"tree is empty\n";
		return 0;
	}
	
	stack<TreeNode *> st;
	stack<int>   flag;
	int first = 1,second = 2;
	
	while(bt || !st.empty()){
		while(bt){
			st.push(bt);
			flag.push(first);
			bt = bt->lchild;
			count++;
		}
		
		if(1 == flag.top()){
			flag.pop();
			flag.push(second);
			bt = st.top();
			bt = bt->rchild;
		}
		else{
			if(count > depth)
				depth = count;
			while(!flag.empty() && 2 == flag.top()){
				flag.pop();
				bt = st.top();
				st.pop();
				count--;
			}
			bt = NULL;
		}
	}
	return depth;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: