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

找树节点在二叉树中的深度

时间:2014-08-04 01:54:46      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:blog   ar   div   amp   size   log   res   type   

/*
*pRoot接收要检索的树的根节点,pNode是要确认深度的结点
 path存储从根结点到pNode的所有节点,包括了pNode和根节点
*/
void findPath(BinaryTreeNode *pRoot, BinaryTreeNode *pNode, vector<int> &path){
	if (pRoot == NULL) return;
	path.push_back(pRoot->m_nValue);
	if (pRoot == pNode){
	//找到了节点,立即返回
	printf("A path is found:\n");
		return;
	}
	vector<int>::size_type preSize = path.size();
	//若在左子树找到pNode,不要释放当前节点,立即返回
	findPath(pRoot->m_pLeft, pNode, path);
	//巧妙的利用path的size增加来判断是否找到节点
	if (preSize < path.size()) return;
	//若在左子树找到pNode,不要释放当前节点,立即返回
	findPath(pRoot->m_pRight, pNode, path);
	//若在左子树找到pNode,不要释放当前节点,立即返回
	if (preSize < path.size()) return;
	path.pop_back();	
}

  这题最容易错的是子树找到节点这种情况没有单独讨论,导致path.pop_back()执行,释放当前压入容器节点,产生逻辑错误。

      最后只要把path.size()-1打印出来就是节点的深度了

     从中可以看出递归写法可以简单优雅地把回溯思路表现出来,掌握递归的写法是程序员能力的一种体现。

找树节点在二叉树中的深度,布布扣,bubuko.com

找树节点在二叉树中的深度

标签:blog   ar   div   amp   size   log   res   type   

原文地址:http://www.cnblogs.com/hzmbbbb/p/3889169.html

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