(C++实现)从上往下打印出二叉树的每个节点,同层节点从左至右打印。

/*
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> a;
    queue<TreeNode *> tree;
    if(root==NULL)return a;
    TreeNode* r;
    tree.push(root);
    while(tree.size()){
        r=tree.front();
        a.push_back(r->val);
        if(r->left!=NULL){
            tree.push(r->left);
        }
        if(r->right!=NULL){
            tree.push(r->right);
        }
        tree.pop();
    }
     return a;
    }
};

思路是:将这个树的根结点放到队列中,然后出队列,将其左孩子和右孩子分别放到队列中,然后再重复这样的工作,每出队列一个,就将这个队列的左孩子和右孩子进队列。依次循环。直到遍历完所有的结点。



原文地址:https://www.cnblogs.com/littleswan/p/11663564.html

时间: 2024-09-29 02:25:36

(C++实现)从上往下打印出二叉树的每个节点,同层节点从左至右打印。的相关文章

剑指offer22:从上往下打印出二叉树的每个节点,同层节点从左至右打印。

1 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 2 思路和方法 使用一个队列存放节点.先将根节点加入到队列中,然后循环遍历队列中的元素,遍历过程中,访问该节点的左右子节点,再将左右子节点加入到队列中. 例子:1 2 3 4 5 6 7 8 ? 对于第一层,只有根节点 1,第二层有节点2和3.先将根节点1加入到队列中,接下来要打印节点为1的两个子节点,应该在遍历到该根节点时把值为2和3的两个子节点保存到队列.按照从左向右打印的要求,取出2,保存其子节点4:随后取出3,保存其子

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

1 /* 2 思路:借助栈来实现 3 树为空时 返回空 4 树不为空 将根节点如队列 5 然后将队列首元素出队列 如果该元素有左子节点那么左子节点入队了 如果该元素有右子节点那么右子节点入队列 6 最后 进队列的顺序也就是出队列的顺序 7 */ 8 import java.util.ArrayList; 9 import java.util.*; 10 import java.util.Iterator; 11 /** 12 public class TreeNode { 13 int val

C++从上往下打印出二叉树的每个节点,同层节点从左至右打印(牛客剑指offer)

/* 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) { queue<TreeNode *> Q; vector<

从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印

题目: 解答: 首先创建BinaryTreeNode 1 public class BinaryTreeNode { 2 int data; 3 BinaryTreeNode lchind; 4 BinaryTreeNode rchind; 5 6 public BinaryTreeNode(int data) { 7 this.data = data; 8 lchind = null; 9 rchind = null; 10 } 11 12 private int getData() { 13

输入一棵二元树,从上往下按层打印每个节点,每层从左往右打印。利用队列。

mport java.util.ArrayDeque; class TreeNode { TreeNode left; TreeNode right; int val; TreeNode(int x) { val = x; } } public class test { public void print(TreeNode root) { ArrayDeque<TreeNode> queue = new ArrayDeque<>(); if(root == null) { retu

从上往下打印二叉树——23

从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如如下二叉树打印出的结果为1.2.3.4.5.6.7.8.9. 上面所说的也就是二叉树的层序遍历,对于层序遍历来说,首先访问的肯定是根节点,然后是其左右结点,之后就是左子树的左右结点和右子树的左右结点,依次往下,如果使用像前中后序遍历那样按照左右结点去递归打印的话肯定是不行的,因为并不能一直先访问某个左结点或者右结点,而是应该左右交叉访问: 上面的二叉树中,打印的顺序是1.2.3.4.5.6.7.8.9,可以想到按照队列的方式

从上往下打印二叉树

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 };*/ 10 class Solution { 11 public: 12 vector<int> PrintFromTopToBo

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

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

剑指OFFER之从上往下打印二叉树(九度OJ1523)

题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号).接下来一行有n个数字,代表第i个二叉树节点的元素的值.接下来有n行,每行有一个字母Ci.Ci='d'表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号.Ci='l'表示第i个节点有一个左孩子,紧接着是左孩子的编号.Ci='r'表示第i个节点有一个右孩