美文网首页
把二叉树打印成多行

把二叉树打印成多行

作者: Crazy_Bear | 来源:发表于2020-07-24 11:01 被阅读0次
  • 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
  • 层次遍历即可
    • 可设置两个变量cur和next,分别记录当前遍历层的个数及记录下一层的个数
  • Java代码
import java.util.*;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
        if(pRoot==null) return res;
        Queue<TreeNode> q = new LinkedList<>();
        ArrayList<Integer> tmp = new ArrayList<>();
        int cur = 1;
        int next =0;
        q.add(pRoot);
        while(!q.isEmpty()){
          TreeNode node = q.remove();
          tmp.add(node.val);
          cur--;
          if(node.left != null) {
              q.add(node.left);
              next++;
          }
          if(node.right != null){
              q.add(node.right);
              next++;
          }
            if(cur==0){
                res.add(new ArrayList<Integer>(tmp));
                tmp.clear();
                cur = next;
                next = 0;
            }
        }
        return res;
    }
    
}
  • C++代码
/*
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) {
            vector<vector<int>> res;
            vector<int> res_line;
            queue<TreeNode*> tmp;
            queue<int> height;
            int pre=1;
            if(pRoot==NULL) return {};
            
            tmp.push(pRoot);
            height.push(1);
            while(!tmp.empty())
            {
                if(height.front()==pre) 
                  res_line.push_back(tmp.front()->val);
                else
                {
                    res.push_back(res_line);
                    res_line.clear();
                    res_line.push_back(tmp.front()->val);
                }
                if(tmp.front()->left) 
                {
                    tmp.push(tmp.front()->left);
                    height.push(height.front()+1);
                }
                 if(tmp.front()->right) 
                {
                    tmp.push(tmp.front()->right);
                    height.push(height.front()+1);
                }
                pre=height.front();
                tmp.pop();
                height.pop();
            }
             res.push_back(res_line);
            return res;     
        }
};

相关文章

  • 剑指offer | 把二叉树打印成多行

    把二叉树打印成多行 从上到下按层打印成多行 分析:使用队列

  • [剑指offer]刷题笔记

    按之字顺序打印二叉树 把二叉树打印成多行 按之字顺序打印二叉树【树】【常考!!!】 题目描述:请实现一个函数按照之...

  • 剑指第三周

    对称的二叉树 其实就是要遍历嘛 按之字形顺序打印二叉树 同样是简单的层次遍历 把二叉树打印成多行 这个更简单了 栈...

  • 把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 这道题目与“从上往下打印二叉树”很相似...

  • 把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 demo1 demo2

  • 把二叉树打印成多行

    《剑指offer》刷题笔记。如有更好解法,欢迎留言。 关键字:树的广度遍历(层次遍历)、队列 题目描述: 从上到下...

  • 把二叉树打印成多行

    从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 层次遍历即可可设置两个变量cur和next,分别...

  • 把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 问题分析 利用一个queue队列存放同...

  • 把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 AC代码 思路 关键点是找一个变量记录...

  • 把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

网友评论

      本文标题:把二叉树打印成多行

      本文链接:https://www.haomeiwen.com/subject/uzcjlktx.html