每日一题(42) - 二叉树中和为某一值的路径

题目来自剑指Offer

题目:

每日一题(42) - 二叉树中和为某一值的路径_第1张图片

代码:

#include <iostream>
#include <assert.h>
using namespace std;

struct BinaryTreeNode
{
	int m_nValue;
	BinaryTreeNode* m_pLeft;
	BinaryTreeNode* m_pRight;
};

void FindPath(BinaryTreeNode* pRoot,int Sum,int nArr[],int& nPos)
{
	if (NULL == pRoot || Sum < 0)
	{
		return;
	}
	if (pRoot->m_nValue == Sum)
	{
		//输出数组元素
		for (int i = 0;i < nPos;i++)
		{
			cout<<nArr[i]<<" ";
		}
		cout<<pRoot->m_nValue <<endl;
		return;
	}
	nArr[nPos++] = pRoot->m_nValue;
	FindPath(pRoot->m_pLeft,Sum - pRoot->m_nValue,nArr,nPos);
	FindPath(pRoot->m_pRight,Sum - pRoot->m_nValue,nArr,nPos);
	nPos--;
}

void FindPath(BinaryTreeNode* pRoot,int Sum)
{
	assert(pRoot);
	int nArr[100];
	int nPos = 0;
	FindPath(pRoot,Sum,nArr,nPos);
}

void Create(BinaryTreeNode*& pRoot)      
{      
	int newData;      
	cin >> newData;      
	if (-1 == newData)      
	{      
		pRoot = NULL;      
	}      
	else      
	{      
		pRoot = new BinaryTreeNode;      
		pRoot->m_nValue = newData;      
		Create(pRoot->m_pLeft);      
		Create(pRoot->m_pRight);       
	}      
}      

int main()
{
	BinaryTreeNode* pRoot = NULL;
	Create(pRoot);
	FindPath(pRoot,22);
	system("pause");
	return 1;
}
注意:

树的构建类似树的子结构,这里不再详述。但是NULL使用 -1 表示。




你可能感兴趣的:(每日一题(42) - 二叉树中和为某一值的路径)