20.从上往下打印二叉树

从上往下打印二叉树
  • 参与人数:3884时间限制:1秒空间限制:32768K
  •  算法知识视频讲解

题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。
相当于实现树的层序遍历,构造一个队列,我使用了尾递归。
// 21.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <vector>
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<int> PrintFromTopToBottom(TreeNode *root) {
		vector<int> retVec;
		if (root == NULL) return retVec;

		vector<TreeNode*> queue;
		queue.push_back(root);
		get(root, queue);
		for (vector<TreeNode*>::iterator it = queue.begin(); it != queue.end(); it++) {
			retVec.push_back((*it)->val);
		}
		return retVec;
	}

	void get(TreeNode* root, vector<TreeNode*>& queue) {
		if (root == NULL) return;

		//queue.push_back(root);
		if (root->left != NULL) {
			queue.push_back(root->left);
		}
		if (root->right != NULL) {
			queue.push_back(root->right);
		}
		get(root->left, queue);
		get(root->right, queue);
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	TreeNode r(10);

	TreeNode left1(6);
	TreeNode right1(14);

	TreeNode left2(4);
	TreeNode right2(8);

	TreeNode left3(12);
	TreeNode right3(16);

	r.left = &left1;
	r.right = &right1;

	left1.left = &left2;
	left1.right = &right2;

	right1.left = &left3;
	right1.right = &right3;

	Solution s;
	s.PrintFromTopToBottom(&r);

	return 0;
}

一开始我把
queue.push_back(root);
写在get函数中,这是错误的,可以打断点试试。

你可能感兴趣的:(20.从上往下打印二叉树)