zoukankan      html  css  js  c++  java
  • [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 }


  • 相关阅读:
    我是怎么找到电子书的

    task1
    centos7 部署 nginx+tomcat+MariaDB 环境并安装安全狗,使用natapp隧道
    CentOS 7.0 使用 yum 安装 MariaDB 与 MariaDB 的简单配置
    mysql 配置 root 远程访问
    tomcat 配置 https 证书
    how2j 的shiro教程初探
    springboot 设置 session 过期时间
    mybatis 异常 too many connections 解决方案 mysql
  • 原文地址:https://www.cnblogs.com/lz87/p/7426057.html
Copyright © 2011-2022 走看看