一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 470|回复: 1
收起左侧

[树/链表/图] 发现三道树的层序遍历可以共用一个模板

[复制链接] |试试Instant~ |关注本帖
oio14644 发表于 2015-8-7 01:46:25 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
发现这三题可以用一个模板,只需要做微调,大大减少记忆量
leetcode 都能通过,
Binary Tree Level Order Traversal
Binary Tree Level Order Traversal II
Binary Tree Zigzag Level Order Traversal


Binary Tree Level Order Traversal
这是基本模板
public class BinaryTreeLevelOrderTraversal {
        public List<List<Integer>> levelOrder(TreeNode root) {
                List<List<Integer>> res = new ArrayList<List<Integer>>();
                if (root == null) {
                        return res;
                }
                Queue<TreeNode> queue = new LinkedList<TreeNode>();
                queue.add(root);
                while (!queue.isEmpty()) {
                        List<Integer> level = new ArrayList<Integer>();
                        int size = queue.size();
                        for (int i = 0; i < size; i++) {
                                TreeNode cur = queue.remove();
                                level.add(cur.val);
                                if (cur.left != null) {
                                        queue.add(cur.left);
                                }
                                if (cur.right != null) {
                                        queue.add(cur.right);
                                }
                        }
                        res.add(level);
                }
                return res;
        }
}

Binary Tree Level Order Traversal II

从前面插入新元素 add(0,val)

public class BinaryTreeLevelOrderTraversal2 {
        public List<List<Integer>> levelOrderBottom(TreeNode root) {
                List<List<Integer>> res = new ArrayList<List<Integer>>();
                if (root == null) {
                        return res;
                }
                Queue<TreeNode> queue = new LinkedList<TreeNode>();
                queue.add(root);
                while (!queue.isEmpty()) {
                        List<Integer> level = new ArrayList<Integer>();
                        int size = queue.size();
                        for (int i = 0; i < size; i++) {
                                TreeNode cur = queue.remove();
                                level.add(cur.val);
                                if (cur.left != null) {
                                        queue.add(cur.left);
                                }
                                if (cur.right != null) {
                                        queue.add(cur.right);
                                }
                        }
                        res.add(0, level);//微调在这里
                }
                return res;
        }
}

Binary Tree Zigzag Level Order Traversal


记录层数,能被2整除就从左到右排,在后面append新元素。直接add(),
不能被2整除就从右到坐排,从前面插入新元素 add(0,val)
*/
public class BinaryTreeZigzagLevelOrderTraversal {
        public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
                List<List<Integer>> res = new ArrayList<List<Integer>>();
                if (root == null) {
                        return res;
                }
                Queue<TreeNode> queue = new LinkedList<TreeNode>();
                queue.add(root);
                int n = 0;//微调在这里

                while (!queue.isEmpty()) {
                        List<Integer> level = new ArrayList<Integer>();
                        int size = queue.size();
                        for (int i = 0; i < size; i++) {
                                TreeNode cur = queue.remove();
                                if (n % 2 == 0) {//微调在这里

                                        level.add(cur.val);
                                } else {
                                        level.add(0, cur.val);
                                }
                                if (cur.left != null) {
                                        queue.add(cur.left);
                                }
                                if (cur.right != null) {
                                        queue.add(cur.right);
                                }
                        }
                        n++;//微调在这里

                        res.add(level);
                }
                return res;
        }
}





评分

2

查看全部评分

knip 发表于 2015-8-30 04:15:20 | 显示全部楼层
很棒到总结,感谢分享!
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-5 06:56

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表