二叉樹中找出和爲某一值的所有路徑

題目:輸入一個整數和一顆二叉樹。從樹結點到葉結點經過的結點定義爲一條路徑。找出路徑上所有結點和爲該整數的路徑並打印出來。


定義二叉樹結點爲下:


struct BinaryTreeNode{

int value;

BinaryTreeNode* left;

BinaryTreeNode* right;

};


思路:

1.典型遞歸。

2.設當前結點是p,用整數減去p->value,得到一個值。 如果p是葉結點。並且值爲0,那麼該路徑是存在的。因爲子結點無法指向父結點,我們需要一個結構來保存從上到下經過的結點。


代碼如下:

struct BinaryTreeNode{
		int value;
		BinaryTreeNode* left;
		BinaryTreeNode* right;
	};

	void FindPath(BinaryTreeNode* root,int value,vector<int> &vec){

		if (root==NULL)
		{
			return;
		}

		vec.push_back(root->value);
		bool isLeaf = (root->left==NULL)&&(root->right==NULL);
		bool isPath = (value==root->value);
		if (isLeaf&&isPath)
		{
			/*
				打印整個路徑
			*/

			std::vector<int>::iterator it = vec.begin();

			for (;it!=vec.end();it++)
			{
				cout<<*it<<" ";
			}
			cout<<endl;


		}
		else if (!isLeaf)
		{
			int remainValue = value - root->value;
			
			
			FindPath(root->left,remainValue,vec);
			FindPath(root->right,remainValue,vec);
			
		}
		

		vec.pop_back();
	}


發佈了27 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章