從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。


// test20.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<stack>

using namespace std;



struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
	val(x), left(NULL), right(NULL) {
	}
};
class Solution {
public:
	//設置兩個隊列,一個存放父節點;一個存放子節點;打印完父節點后,再把子隊列的值存放到父隊列中
	vector<vector<int> > Print(TreeNode* pRoot) {
		queue<TreeNode*> faQue;
		queue<TreeNode*> chQue;
		vector<vector<int>> vec;
		vector<int> line;
		if (pRoot == NULL) return{};
		faQue.push(pRoot);
		/*line.push_back(pRoot->val);
		vec.push_back(line);*/

		while (!faQue.empty ()||!chQue.empty ())
		{
			if (faQue.front()->left != NULL) chQue.push(faQue.front()->left); //左右節點放到孩子節點的位置
			if (faQue.front()->right != NULL) chQue.push(faQue.front()->right);
			line.push_back(faQue.front()->val);
			faQue.pop();
			if (faQue.empty())//當節點打印完成后,將所有父節點的值傳遞過去;要清空line;把孩子的節點給父節點;子隊列清空;進行下次循環;
			{
				vec.push_back(line);
				line.clear();
				while (!chQue.empty ())
				{
					faQue.push(chQue.front());
					chQue.pop();
				}
			}
		}
		return vec;

	}


	void preCreate(TreeNode* &T)
	{
		int num;
		cin >> num;
		if (num == 0) T = NULL;
		else
		{
			T = new TreeNode(num);
			preCreate(T->left);
			preCreate(T->right);
		}
	}

	void preOrder(TreeNode* T)
	{
		if (T == NULL) return; 
		else
		{
			cout << T->val << "  ";
			preOrder(T->left);
			preOrder(T->right);
		}
	}
};
int main()
{
	
	Solution so;
	TreeNode *T1;
	TreeNode *T2;
	vector<vector<int>> vec;


	cout << "創建T1:" << endl;
	so.preCreate(T1);
	cout << "創建T1成功!" << endl;



	cout << "T1的前序遍歷:" << endl;
	so.preOrder(T1);
	cout << endl;

	//so.CreateImageTree(T1,T2);
	//cout << "T2的前序遍歷是(T2是T1的鏡像):"<<endl;
	//so.preOrder(T2);
	//cout << endl;

	cout << "T1的層次關系是:"<<endl ;
	vec = so.Print(T1);
	for (auto it = vec.begin();it != vec.end();++it)
	{
		for (auto p = it->begin();p != it->end();++p)
		{
			cout << *p << "  ";
		}
		cout << endl;
	}




	
	
	cout << endl;
	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM