zoukankan      html  css  js  c++  java
  • LeetCode 863. All Nodes Distance K in Binary Tree

    原题链接在这里:https://leetcode.com/problems/all-nodes-distance-k-in-binary-tree/

    题目:

    We are given a binary tree (with root node root), a target node, and an integer value K.

    Return a list of the values of all nodes that have a distance K from the target node.  The answer can be returned in any order.

    Example 1:

    Input: root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2
    
    Output: [7,4,1]
    
    Explanation: 
    The nodes that are a distance 2 from the target node (with value 5)
    have values 7, 4, and 1.
    
    
    
    Note that the inputs "root" and "target" are actually TreeNodes.
    The descriptions of the inputs above are just serializations of these objects.

    Note:

    1. The given tree is non-empty.
    2. Each node in the tree has unique values 0 <= node.val <= 500.
    3. The target node is a node in the tree.
    4. 0 <= K <= 1000.

    题解:

    Clone this tree with new type of Node containing a pointer to parent.

    Find the cloned target node and do BFS from it.

    Time Complexity: O(n). Deep clone takes O(n). BFS takes O(n).

    Time Complexity: O(n). Regardless res.

    AC Java:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11     Node clonedTargetNode;
    12     public List<Integer> distanceK(TreeNode root, TreeNode target, int K) {
    13         List<Integer> res = new ArrayList<Integer>();
    14         if(root == null){
    15             return res;
    16         }
    17         
    18         deepClone(root, null, target);
    19         LinkedList<Node> que = new LinkedList<Node>();
    20         que.add(clonedTargetNode);
    21         
    22         HashSet<Node> used = new HashSet<Node>();
    23         used.add(clonedTargetNode);
    24         while(!que.isEmpty()){
    25             int size = que.size();
    26             if(K==0){
    27                 for(int i = 0; i<size; i++){
    28                     res.add(que.poll().val);
    29                 }
    30                 
    31                 return res;
    32             }
    33             
    34             for(int i = 0; i<size; i++){
    35                 Node cur = que.poll();
    36                 if(cur.parent != null && !used.contains(cur.parent)){
    37                     que.add(cur.parent);
    38                     used.add(cur.parent);
    39                 }
    40                 
    41                 if(cur.left != null && !used.contains(cur.left)){
    42                     que.add(cur.left);
    43                     used.add(cur.left);
    44                 }
    45                 
    46                 if(cur.right != null && !used.contains(cur.right)){
    47                     que.add(cur.right);
    48                     used.add(cur.right);
    49                 }
    50             }
    51             
    52             K--;
    53         }
    54         
    55         return res;
    56     }
    57     
    58     private Node deepClone(TreeNode root, Node parent, TreeNode target){
    59         if(root == null){
    60             return null;
    61         }
    62         
    63         Node clonedRoot = new Node(root.val);
    64         if(root == target){
    65             clonedTargetNode = clonedRoot;
    66         }
    67         
    68         clonedRoot.parent = parent;
    69         clonedRoot.left = deepClone(root.left, clonedRoot, target);
    70         clonedRoot.right = deepClone(root.right, clonedRoot, target);
    71         return clonedRoot;
    72     }
    73 }
    74 
    75 class Node{
    76     int val;
    77     Node parent;
    78     Node left;
    79     Node right;
    80     Node(int x){
    81         this.val = x;
    82     }
    83 }
  • 相关阅读:
    纯javascript遮罩层原理
    artDIalog 弹出层
    键盘对应ASCII码
    SQL Prompt 4安装步骤
    VSS2008 安装silverlight3.0步骤
    Jquery循环显示图片
    借助一般处理程序做验证码
    Socket编程原理及属性
    完整的HttpRequest讲解 createXmlHttpRequest Ajax请求
    年月日三级菜单 jquery
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11119888.html
Copyright © 2011-2022 走看看