Buttercola: Indeed: Tree to Array
给定一个Tree, 如何存储这个树来节省空间?
Solution:
Use a binary heap to represent a complete binary tree.
Complete tree: perfectly balanced tree, except for the bottom level.
Binary heap: Array representation of a heap-ordered complete binary tree.
Do we need the queue?
Read full article from Buttercola: Indeed: Tree to Array
给定一个Tree, 如何存储这个树来节省空间?
Solution:
Use a binary heap to represent a complete binary tree.
Complete tree: perfectly balanced tree, except for the bottom level.
Binary heap: Array representation of a heap-ordered complete binary tree.
Do we need the queue?
private Queue<TreeNode> nodeQueue = new LinkedList<>(); private Queue<Integer> indexQueue = new LinkedList<>(); public Integer[] compressTree(TreeNode root) { // step 1: get the height of the tree int height = getTreeHeight(root); int n = (int) Math.pow(2, height); Integer[] array = new Integer[n]; nodeQueue.offer(root); indexQueue.offer(1); while (!nodeQueue.isEmpty()) { TreeNode node = nodeQueue.poll(); int index = indexQueue.poll(); array[index] = node.val; if (node.left != null) { nodeQueue.offer(node.left); indexQueue.offer(2 * index); } if (node.right != null) { nodeQueue.offer(node.right); indexQueue.offer(2 * index + 1); } } return array; } private int getTreeHeight(TreeNode root) { if (root == null) { return 0; } int left = getTreeHeight(root.left); int right = getTreeHeight(root.right); return Math.max(left, right) + 1; }Read full article from Buttercola: Indeed: Tree to Array