# 1469. Find All The Lonely Nodes

## LeetCode [1469. Find All The Lonely Nodes](https://leetcode-cn.com/problems/find-all-the-lonely-nodes/)

### Description

In a binary tree, a **lonely** node is a node that is the only child of its parent node. The root of the tree is not lonely because it does not have a parent node.

Given the `root` of a binary tree, return *an array containing the values of all lonely nodes* in the tree. Return the list **in any order**.

**Example 1:**

![](https://assets.leetcode.com/uploads/2020/06/03/e1.png)

```
Input: root = [1,2,3,null,4]
Output: [4]
Explanation: Light blue node is the only lonely node.
Node 1 is the root and is not lonely.
Nodes 2 and 3 have the same parent and are not lonely.
```

**Example 2:**

![](https://assets.leetcode.com/uploads/2020/06/03/e2.png)

```
Input: root = [7,1,4,6,null,5,3,null,null,null,null,null,2]
Output: [6,2]
Explanation: Light blue nodes are lonely nodes.
Please remember that order doesn't matter, [2,6] is also an acceptable answer.
```

**Example 3:**

![](https://assets.leetcode.com/uploads/2020/06/03/tree.png)

```
Input: root = [11,99,88,77,null,null,66,55,null,null,44,33,null,null,22]
Output: [77,55,33,66,44,22]
Explanation: Nodes 99 and 88 share the same parent. Node 11 is the root.
All other nodes are lonely.
```

**Example 4:**

```
Input: root = [197]
Output: []
```

**Example 5:**

```
Input: root = [31,null,78,null,28]
Output: [78,28]
```

**Constraints:**

* The number of nodes in the `tree` is in the range `[1, 1000].`
* Each node's value is between `[1, 10^6]`.

### Tags

Tree

### Solution

We collect node values from the views of their parents. In the DFS function, we do not consider any null nodes or leaf nodes since they have no children. Then, if the current node has only one child, we append the value of that child to the result array. At last, perform DFS on both left and right children. Because we only collect the value of input node's child, we can start DFS from root, which will not be collected.

### Complexity

* Time complexity: $$O(n)$$
* Space complexity: $$O(1)$$

### Code

```go
func getLonelyNodes(root *TreeNode) []int {
	var ans []int
	var dfs func(node *TreeNode)
	dfs = func(node *TreeNode) {
		if node == nil || node.Left == nil && node.Right == nil {
			return
		}
		if node.Left == nil {
			ans = append(ans, node.Right.Val)
		}
		if node.Right == nil {
			ans = append(ans, node.Left.Val)
		}
		dfs(node.Left)
		dfs(node.Right)
	}
	dfs(root)
	return ans
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://txfs19260817.gitbook.io/leetcode-go-notes/solutions/1469.-find-all-the-lonely-nodes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
