zoukankan      html  css  js  c++  java
  • 剑指Offer-22.从上往下打印二叉树(C++/Java)

    题目:

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

    分析:

    按层次打印二叉树的节点,重点就是我们在打印一层节点的时候,同时按顺序保存好当前节点的下一层节点,也就是左节点和右节点,当此层节点打印完毕后,再打印刚才保存好的节点序列,也就是广度优先遍历。我们可以使用两个数组分别用来保存打印层节点,和下一层节点,在当前层结束后,将下层数组赋给打印数组,循环执行,知道打印数组为空,也就打印完毕了。

    也可以使用队列来打印二叉树,每打印一个节点,就将这个节点的左右节点添加进队列中,直到队列为空。

    程序:

    C++

    class Solution {
    public:
        vector<int> PrintFromTopToBottom(TreeNode* root) {
            if(root == nullptr) return res;
            vector<TreeNode*> TNode;
            vector<TreeNode*> temp;
            TNode.push_back(root);
            while(!TNode.empty()){
                for(int i = 0; i < TNode.size(); ++i){
                    res.push_back(TNode[i]->val);
                    if(TNode[i]->left)
                        temp.push_back(TNode[i]->left);
                    if(TNode[i]->right)
                        temp.push_back(TNode[i]->right);
                }
                TNode.swap(temp);
                temp.clear();
            }
            return res;
        }
    private:
        vector<int> res;
    };

    Java

    import java.util.ArrayList;
    import java.util.Queue;
    import java.util.LinkedList;
    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
            if(root == null) return res;
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            queue.offer(root);
            while(!queue.isEmpty()){
                TreeNode n = queue.poll();
                res.add(n.val);
                if(n.left != null)
                    queue.offer(n.left);
                if(n.right != null)
                    queue.offer(n.right);
            }
            return res;
        }
        private ArrayList<Integer> res = new ArrayList<>();
    }
  • 相关阅读:
    样条之CatmullRom
    分形之树(Tree)
    B样条
    样条之贝塞尔(Bezier)
    插值与样条
    windows 下的Python虚拟环境(vitrualen)pycharm创建Django项目
    VS2010专业版和旗舰版(中文版)下载
    PHP课程环境安装总结文档
    原码、反码、补码知识详细讲解(此作者是我找到的讲的最细最明白的一个)
    C语言中size_t类型详细说明【转载】
  • 原文地址:https://www.cnblogs.com/silentteller/p/11920934.html
Copyright © 2011-2022 走看看