[GeeksForGeeks] Extract Leaves of a Binary Tree in a Doubly Linked List
Posted Push your limit!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[GeeksForGeeks] Extract Leaves of a Binary Tree in a Doubly Linked List相关的知识,希望对你有一定的参考价值。
Given a Binary Tree, extract all leaves of it in a Doubly Linked List (DLL). Note that the DLL need to be created in-place. Assume that the node structure of DLL and Binary Tree is same, only the meaning of left and right pointers are different. In DLL, left means previous pointer and right means next pointer.
Let the following be input binary tree 1 / 2 3 / \ 4 5 6 / \ / 7 8 9 10 Output: Doubly Linked List 7<->8<->5<->9<->10 Modified Tree: 1 / 2 3 / 4 6
1 import java.util.LinkedList; 2 import java.util.Queue; 3 4 public class ExtractLeavesToDLL { 5 private TreeNode head = null; 6 private TreeNode tail = null; 7 public void extractLeaveNodesToDLL(TreeNode root) { 8 recursionHelper(root); 9 } 10 private boolean recursionHelper(TreeNode node) { 11 if(node == null) { 12 return false; 13 } 14 else if(node.left == null && node.right == null) { 15 if(head == null) { 16 head = node; 17 tail = node; 18 } 19 else { 20 tail.right = node; 21 node.left = tail; 22 tail = node; 23 } 24 return true; 25 } 26 if(recursionHelper(node.left)) { 27 node.left = null; 28 } 29 if(recursionHelper(node.right)) { 30 node.right = null; 31 } 32 return false; 33 } 34 private void traverseDLL(TreeNode head) { 35 TreeNode curr = head; 36 while(curr != null) { 37 String prevNode = curr.left == null ? "null" : Integer.toString(curr.left.key); 38 String nextNode = curr.right == null ? "null" : Integer.toString(curr.right.key); 39 System.out.println(curr.key + "‘s prev node is " + prevNode + " and its next node is " + nextNode); 40 curr = curr.right; 41 } 42 } 43 private void traverseBT(TreeNode root) { 44 Queue<TreeNode> queue = new LinkedList<TreeNode>(); 45 queue.add(root); 46 47 while(!queue.isEmpty()) { 48 TreeNode curr = queue.poll(); 49 String leftNode = curr.left == null ? "null" : Integer.toString(curr.left.key); 50 String rightNode = curr.right == null ? "null" : Integer.toString(curr.right.key); 51 System.out.println(curr.key + "‘s left node is " + leftNode + " and its right node is " + rightNode); 52 if(curr.left != null) { 53 queue.add(curr.left); 54 } 55 if(curr.right != null) { 56 queue.add(curr.right); 57 } 58 } 59 } 60 public static void main(String[] args) { 61 TreeNode[] nodes = new TreeNode[10]; 62 for(int i = 0; i < nodes.length; i++) { 63 nodes[i] = new TreeNode(i + 1); 64 } 65 nodes[0].left = nodes[1]; nodes[0].right = nodes[2]; 66 nodes[1].left = nodes[3]; nodes[1].right = nodes[4]; 67 nodes[2].right = nodes[5]; 68 nodes[3].left = nodes[6]; nodes[3].right = nodes[7]; 69 nodes[5].left = nodes[8]; nodes[5].right = nodes[9]; 70 ExtractLeavesToDLL test = new ExtractLeavesToDLL(); 71 test.extractLeaveNodesToDLL(nodes[0]); 72 73 //check dll is correctly constructed 74 test.traverseDLL(test.head); 75 //check binary tree is correctly modified. 76 test.traverseBT(nodes[0]); 77 } 78 }
以上是关于[GeeksForGeeks] Extract Leaves of a Binary Tree in a Doubly Linked List的主要内容,如果未能解决你的问题,请参考以下文章
有没有类似于 Perl 的 Archive::Extract 的 Python 包?
为啥这段代码在 leetcode 运行良好,但在 geeksforgeeks 出现分段错误?
geeksforgeeks@ Equal to product (Binary Search)