将一棵二叉树按行输出
来源:互联网 发布:安畅网络 程小中 编辑:程序博客网 时间:2024/04/28 17:58
给定一个二叉树,按行从左到右输出一个树。例如按如下格式:
6
5 15
7 9 10 50
1、递归计算,感觉这种办法好傻
public List<List<Integer>> levelOrder(TreeNode root) { if(root==null)return new ArrayList<List<Integer>>(); List<List<Integer>> listleft=null; List<List<Integer>> listright=null; List<List<Integer>> list=new ArrayList<List<Integer>>(); if(root.left!=null){ listleft=levelOrder(root.left); } if(root.right!=null){ listright=levelOrder(root.right); } if(listleft==null&&listright!=null){ List<Integer> newList=new ArrayList<Integer>(); newList.add(root.val); list.add(newList); list.addAll(listright); return list; } if(listleft!=null&&listright==null){ List<Integer> newList=new ArrayList<Integer>(); newList.add(root.val); list.add(newList); list.addAll(listleft); return list; } if(listleft==null&&listright==null){ List<Integer> newList=new ArrayList<Integer>(); newList.add(root.val); list.add(newList); return list; } List<Integer> newList=new ArrayList<Integer>(); newList.add(root.val); list.add(newList); int lengthleft=listleft.size(); int lengthright=listright.size(); int i=0,j=0; while(i<lengthleft&&j<lengthright){ listleft.get(i).addAll(listright.get(j)); j++;i++; } list.addAll(listleft); if(j<lengthright){ for(i=j;i<lengthright;i++){ list.add(listright.get(i)); } } return list; }
2、因为是按层的,根据先序遍历,所有可以用一个level来表示层,向level对应的list中添加数据。
public static void getList(TreeNode root, int level, List<List<Integer>> list) { if (root == null) return; if (list.size() > level) { List<Integer> temp = list.get(level); temp.add(root.val); } else { List<Integer> temp = new ArrayList<>(); temp.add(root.val); list.add(level, temp); } getList(root.left, level + 1, list); getList(root.right, level + 1, list); }
3、利用队列,先序遍历。
public static void getList(TreeNode root,List<List<Integer>> list){ Queue<TreeNode> queue=new LinkedList<>(); if(root==null)return; queue.add(root); int size=queue.size(); while(!queue.isEmpty()){ List<Integer> temp=new ArrayList<>(); for(int i=0;i<size;i++){ TreeNode node=queue.poll(); temp.add(node.val); if(node.left!=null)queue.add(node.left); if(node.left!=null)queue.add(node.right); } list.add(temp); size=queue.size(); } }
0 0
- 将一棵二叉树按行输出
- bfs实现二叉树按行有序输出
- 顺序二叉树三序输出
- 五:二叉树输出
- 二叉树输出
- 二叉树的输出
- 二叉树的输出
- 1088 -- 输出二叉树
- 【二叉树】一条龙输出
- 二叉树输出(btout)
- 1265: 输出二叉树
- 输出二叉树的宽度
- 层序输出二叉树
- 构造二叉树并输出
- 按层输出二叉树
- 建立二叉树和输出
- 层序输出二叉树:
- 二叉树输出(树)
- JQuery禁用右键、文本选择功能、复制按键的实现
- iptables教程
- Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
- JavaSe基础(17)-- interface 接口
- Unity 5 全域光照使用小技巧
- 将一棵二叉树按行输出
- String的equals与Object的equals的区别
- HDU2188——悼念512汶川大地震遇难同胞——选拔志愿者(Bash Game巴士博弈)(我去,名字肿么这么长)
- Activity去掉默认的动画效果方法:
- Java微信公众平台开发(二)——微信服务器post消息体的接收
- Xcode个人常用插件总结
- iOS开发-环信添加好友
- Activity 和 Fragment 的交互
- 319. Bulb Switcher