chenheng199898

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

剑指 Offer 32 - I. 从上到下打印二叉树

题目

在这里插入图片描述

思路

通过队列工具,将每一层的节点由左到右一次添加,当队列不为空的时候始终可以运行;

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int[] levelOrder(TreeNode root) {
        if(root==null) return new int[0];
        Queue<TreeNode> queue=new LinkedList<>(){{add(root);}};
        ArrayList<Integer> list=new ArrayList<>();
        while(!queue.isEmpty()){
            TreeNode node=queue.poll();
            list.add(node.val);
            if(node.left!=null) queue.add(node.left);
            if(node.right!=null) queue.add(node.right);
        }
        int[] ans=new int[list.size()];
        for(int i=0;i<list.size();i++){
            ans[i]=list.get(i);
        }
        return ans;
    }
}
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        if root==None: return []
        ans,queue=[],collections.deque()
        queue.append(root)
        while(queue):
            node=queue.popleft()
            ans.append(node.val)
            if node.left : queue.append(node.left)
            if node.right: queue.append(node.right)
        return ans

剑指 Offer 32 - II. 从上到下打印二叉树 II

在这里插入图片描述

思路

注意输出时需要将每层节点作为一个值添加进最外层的list中,设置一个记录树每层有多少个节点的计数值(即为队列的长度),按照该计数值,循环输出该层的节点数值。

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        if(root==null) return new LinkedList<>();
        Queue<TreeNode> queue=new LinkedList<>(){{add(root);}};
        List<List<Integer>> arr=new LinkedList<>();
        while(!queue.isEmpty()){
            LinkedList<Integer> tmp=new LinkedList<>();
            int len=0;
            len=queue.size();
            while(len>0){
                TreeNode node=queue.poll();
                tmp.add(node.val);
                if(node.left!=null) queue.add(node.left);
                if(node.right!=null) queue.add(node.right);
                len--;
            }
            arr.add(tmp);
        }
        return arr;
    }
}
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if root==None:return []
        ans,queue=[],collections.deque()
        queue.append(root)
        while queue:
            tmp=[]
            length=len(queue)
            while length:
                node=queue.popleft()
                tmp.append(node.val)
                if node.left : queue.append(node.left)
                if node.right: queue.append(node.right)
                length-=1
            ans.append(tmp)
        return ans

剑指 Offer 32 - III. 从上到下打印二叉树 III

题目

在这里插入图片描述

代码

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        List<List<Integer>> res = new ArrayList<>();
        if(root != null) queue.add(root);
        while(!queue.isEmpty()) {
            LinkedList<Integer> tmp = new LinkedList<>();
            for(int i = queue.size(); i > 0; i--) {
                TreeNode node = queue.poll();
                if(res.size() % 2 == 0) tmp.addLast(node.val); // 偶数层 -> 队列头部
                else tmp.addFirst(node.val); // 奇数层 -> 队列尾部
                if(node.left != null) queue.add(node.left);
                if(node.right != null) queue.add(node.right);
            }
            res.add(tmp);
        }
        return res;
    }
}
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if root==None:return []
        ans,queue=[],collections.deque()
        queue.append(root)
        i=2
        while queue:
            tmp=collections.deque();
            length=len(queue)
            while length :
                node=queue.popleft()
                if i % 2: tmp.appendleft(node.val) # 偶数层 -> 队列头部
                else: tmp.append(node.val) # 奇数层 -> 队列尾部
                if node.left : queue.append(node.left)
                if node.right: queue.append(node.right)
                length-=1
            ans.append(list(tmp))
            i+=1
        return ans
posted on 2020-07-29 12:06  chenheng199898  阅读(61)  评论(0)    收藏  举报