3.10分层打印二叉树的节点

#include<iostream>
#include<vector>
using namespace std;
struct Node
{
	char value;
	Node *left;
	Node *right;
};
void create(Node *&T)
{
	char c;
	cin>>c;
	if('#'==c)
	{
		T=NULL;
	}
	else
	{
		T=new Node;
		T->value=c;
		create(T->left);
		create(T->right);
	}

}
void preorder(Node *node)
{
	if(node==NULL)
		return;
	else
	{
		cout<<node->value<<" ";
		preorder(node->left);
		preorder(node->right);
	}
}
void printnodebylevel(Node *root)
{
	if(root==NULL)
		return ;
	vector<Node *> vec;
	vec.push_back(root);
	int cur=0;
	int last=1;
	while(cur<vec.size())
	{
		last=vec.size();
		while(cur<last)
		{
			cout<<vec[cur]->value<<" ";
			if(vec[cur]->left!=NULL)
				vec.push_back(vec[cur]->left);
			if(vec[cur]->right!=NULL)
				vec.push_back(vec[cur]->right);
			cur++;
		}
		cout<<endl;
	}
}
int main()
{
	Node *root;
	create(root);
	//preorder(root);
	//cout<<endl;
	 printnodebylevel(root);
	system("pause");
	return 0;
}

时间: 2024-10-09 13:17:07

3.10分层打印二叉树的节点的相关文章

【编程之美】3.10分层遍历二叉树

主要难度在于何时插入换行 学习到的:①vector 可以像数组一样用 不一定要用迭代器 代码及注释如下: #include<iostream> #include<queue> using namespace std; typedef struct BiTree { BiTree * pLeft, * pRight; int data; }BiTree; void createBiTree(BiTree * &T) { int d; cout << "p

3.10 分层遍历二叉树

题目1:写一个函数,打印二叉树中某层次的节点(从左到右),其中根节点为第0层. 思路:利用递归算法,思想是:要求访问二叉树中第k层的节点,那么其实就是要访问"以该二叉树根节点的左右子节点为根节点的两颗子树"中层次为k-1的节点 代码: struct pNode { int data; pNode *lChild; pNode *rChild; }; int printNodeAtLevel(pNode *root, int level) { if(root == NULL || lev

左神算法书籍《程序员代码面试指南》——3_02打印二叉树的边界节点【★★】

[题目]给定一棵二叉树的头节点head,按照如下两种标准分别实现二叉树边界节点的逆时针打印.标准一:1.头节点为边界节点.2.叶节点为边界节点.3.如果节点在其所在的层中是最左或最右的,那么也是边界革点.标准二:1.头节点为边界节点.2.叶节点为边界节点.3.树左边界延伸下去的路径为边界节点.4.树右边界延伸下去的路径为边界节点.例如,如图3 - 2所示的树. 按标准一的打印结果为:1,2,4,7,11,13,14,15,16,12,10,6,3按标准二的打印结果为:1,2,4,7,13,14,

从上往下打印二叉树(分层遍历)

从上往下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 从上到下打印二叉树的规律:每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾.接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直到队列中所有的节点都被打印出来为止. struct TreeNode { int val; TreeNode* left; TreeNode* right; }; void LevelOrder(BinaryTreeNode* root) { if (roo

打印二叉树节点数值总和等于某个给定节点的所有路径

打印二叉树节点数值总和等于某个给定节点的所有路径,路径可以从任意节点开始,任意节点结束. 比如,假设和是8,树如下 的路径有  [[5,3],[8],[5,1,2]].  5  / \ 3     1 /\     /\ 4  8  2   6 思路:遍历所有路径,对于每一个节点,在其路径中向后寻找sum和为target的路径加入到结果中. public List<List<Integer>> findSum(TreeNode root,int sum){ List<List

Python实现打印二叉树某一层的所有节点

不多说,直接贴程序,如下所示 # -*- coding: utf-8 -*- # 定义二叉树节点类 class TreeNode(object): def __init__(self,data=0,left=0,right=0): self.data = data self.left = left self.right = right # 遍历某一层所有节点,并打印 def TransLevel(root,level): if root == None: return else: if leve

算法总结之 打印二叉树的边界节点

给定一棵二叉树的头节点head, 按照两种标准分别实现二叉树边界节点的逆时针打印 标准一 头节点为边界节点 叶节点为边界节点 如果节点在其所在的层中是最左或者最右边,那么也是边界节点 标准二 头节点作为边界节点 叶节点位边界节点 树左边界延伸下去的路径为边界节点 树有边界延伸下去的路径为边界节点

编程之美-分层遍历二叉树

问题:给定一个二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序为从左到右,并将节点依次编号.那么分层遍历如图的二叉树,正确的输出应该为: <span style="font-size:14px;">1 2 3 4 5 6 7 8</span> 书中还给出了问题2:打印二叉树中的某层次的节点(从左到右),其中根结点为第0层,成功返回true,失败返回false 分析与解法 关于二叉树的问题,由于其本身固有的

剑指Offer面试题23(Java版):从上往下打印二叉树

题目:从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入下图的二叉树,则一次打印出8,6,10,5,7,9,11. 这道题实质上考察的就是树的遍历算法,只是这种遍历不是我们熟悉的前序.中序或者后序遍历.由于我们不太熟悉这种按层遍历的方法,可能已下载也想不清楚遍历的过程. 因为按层打印的顺序决定应该先打印的根节点,所以我们从树的根节点开始分析.为了接下来能够打印8的结点的两个子节点,我们应该在遍历到该结点时把值为6和10的两个结点保存到一个容器中,现在容器内就有两个结点了.