写一个函数,打印二叉树中某层的所有结点
2014-04-01 20:43
344 查看
二叉树结点定义:
struct Node
{
int v;
Node* left;
Node* right;
};
函数原型:
void print_node_at_level(Node* node, int level);
说明:
将level层的结点中所保存的值打印在同一行。
思路:
可以利用递归方法,打印node所指结点为根节点的第level层的结点,可以打印node的左右子树的第level-1层的结点,一次递归。
还可以用层次遍历的方法打印某一层的结点,要借助两个队列实现,一个队列一次存放每层的结点,另一个队列一次存放对应结点所在的层数。
struct Node
{
int v;
Node* left;
Node* right;
};
函数原型:
void print_node_at_level(Node* node, int level);
说明:
将level层的结点中所保存的值打印在同一行。
思路:
可以利用递归方法,打印node所指结点为根节点的第level层的结点,可以打印node的左右子树的第level-1层的结点,一次递归。
还可以用层次遍历的方法打印某一层的结点,要借助两个队列实现,一个队列一次存放每层的结点,另一个队列一次存放对应结点所在的层数。
#include <iostream> #include <queue> using namespace std; struct Node { int v; Node* left; Node* right; }; void print_node_at_level(Node* node, int level) { if( node == NULL || level <= -1 ) return ; if( level == 0 ) cout<<node->v<<'\t'; else { print_node_at_level(node->left, level-1); /* 递归调用,直到level==0 */ print_node_at_level(node->right, level-1); } } void print_node_at_level_ex(Node* node, int level) { if( node == NULL || level <= -1 ) return ; queue<Node*> queue_node; /*用于存放结点指针的队列*/ queue<int> queue_level; /*用于存放每个节点对应的层数*/ int count_level = 0; queue_node.push(node); queue_level.push(0); while( queue_node.size() != 0 ) { Node* temp = queue_node.front(); count_level = queue_level.front(); queue_node.pop(); queue_level.pop(); if( count_level == level ) /*到达指定的层数,打印结点数值*/ { cout<<temp->v<<'\t'; } else if( count_level < level ) /*没有到达指定层数,继续层次遍历该数*/ { if( temp->left != NULL ) { queue_node.push(temp->left); queue_level.push(count_level+1); } if( temp->right != NULL ) { queue_node.push(temp->right); queue_level.push(count_level+1); } } } } int main() { Node nodes[] = { {0, NULL, NULL}, {1, NULL, NULL}, {2, NULL, NULL}, {3, NULL, NULL}, {4, NULL, NULL}, {5, NULL, NULL}, {6, NULL, NULL}, {7, NULL, NULL} }; nodes[0].left = &nodes[1]; nodes[0].right = &nodes[2]; nodes[1].left = &nodes[3]; nodes[1].right = &nodes[4]; nodes[2].left = &nodes[5]; nodes[2].right = NULL; nodes[4].left = &nodes[6]; nodes[4].right = &nodes[7]; print_node_at_level(nodes, 6); cout<<endl; print_node_at_level_ex(nodes, 6); cout<<endl; return 0; }
相关文章推荐
- 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 剑指offer_输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径
- 题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶结点所经过的结点形成一条路径。
- 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径(剑指offer)
- 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径
- java 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- 【31】给定一个二叉树打印出所有从根结点到叶子结点路径和为 k 的路径
- java实现输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径
- 【31】给定一个二叉树打印出所有从根结点到叶子结点路径和为 k 的路径
- 剑指offer 打印出二叉树中结点值的和为输入整数的所有路径。
- 二叉树求两个结点的父节点及一个结点的所有祖先结点
- 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
- <仅是自己做笔记。。。系列-4>输入一个整数和一棵二元树,从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径,打印出和与输入整数相等的所有路径
- 《剑指Offer》面试题:打印出二叉树中结点值的和为输入整数的所有路径
- php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
- 打印二叉树第K层的所有结点
- 面试题:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。