首页 > 代码库 > 找树节点在二叉树中的深度

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

/**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打印出来就是节点的深度了

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