如何用层序遍历一个普通的二叉树,并把它以完全二叉树的形式存入数组内呢?为空的地方存入null这种思路,想了半天都没法实现,
2条回答 默认 最新
- _Mr.Tree 2021-11-22 20:59关注
import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; public class Test { static class TreeNode{ TreeNode left; TreeNode right; int val; public TreeNode(TreeNode left, TreeNode right, int val) { this.left = left; this.right = right; this.val = val; } } public static void main(String[] args) { TreeNode seven = new TreeNode(null, null, 7); TreeNode eight = new TreeNode(null, null, 8); TreeNode four = new TreeNode(seven, eight, 4); TreeNode nine = new TreeNode(null, null, 9); TreeNode ten = new TreeNode(null, null, 10); TreeNode five = new TreeNode(nine, ten, 5); TreeNode two = new TreeNode(four, five, 2); TreeNode eleven = new TreeNode(null, null, 11); TreeNode twelve = new TreeNode(null, null, 12); TreeNode six = new TreeNode(eleven, twelve, 6); TreeNode three = new TreeNode(null, six, 3); TreeNode one = new TreeNode(two, three, 1); levelTraver(one).forEach(e -> System.out.print((e == null ? "null" : e.val) + " ")); } private static List<TreeNode> levelTraver(TreeNode root){ List<TreeNode> resultList = new ArrayList<>(); if(root == null) return resultList; Queue<TreeNode> q = new LinkedList<>(); boolean hasChild = false; q.offer(root); if(root.left != null || root.right != null) hasChild = true; while(!q.isEmpty()){ int len = q.size(); boolean isAllNull = true; boolean nextHasChild = false; for(int i = 0; i < len; i++){ resultList.add((root = q.poll())); if(root == null){ if(hasChild){ q.offer(null); q.offer(null); } continue; } isAllNull = false; if(root.left != null){ q.offer(root.left); nextHasChild = true; }else if(hasChild){ q.offer(null); } if(root.right != null){ q.offer(root.right); nextHasChild = true; }else if(hasChild){ q.offer(null); } } hasChild = nextHasChild; if(isAllNull){ while(len-- > 0){ resultList.remove(resultList.size() - 1); } break; } } return resultList; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 matlab yalmip kkt 双层优化问题
- ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
- ¥88 实在没有想法,需要个思路
- ¥15 MATLAB报错输入参数太多
- ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
- ¥15 有赏,i卡绘世画不出
- ¥15 如何用stata画出文献中常见的安慰剂检验图
- ¥15 c语言链表结构体数据插入
- ¥40 使用MATLAB解答线性代数问题
- ¥15 COCOS的问题COCOS的问题