Skip to content

Sri Hari: Batch-2/Neetcode-150/articles #3674

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
616 changes: 616 additions & 0 deletions articles/balanced-binary-tree.md

Large diffs are not rendered by default.

398 changes: 398 additions & 0 deletions articles/binary-tree-right-side-view.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,398 @@
## 1. Depth First Search

::tabs-start

```python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right

class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
res = []

def dfs(node, depth):
if not node:
return None
if depth == len(res):
res.append(node.val)

dfs(node.right, depth + 1)
dfs(node.left, depth + 1)

dfs(root, 0)
return res
```

```java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/

public class Solution {
List<Integer> res = new ArrayList<>();

public List<Integer> rightSideView(TreeNode root) {
dfs(root, 0);
return res;
}

private void dfs(TreeNode node, int depth) {
if (node == null) {
return;
}

if (res.size() == depth) {
res.add(node.val);
}

dfs(node.right, depth + 1);
dfs(node.left, depth + 1);
}
}
```

```cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/

class Solution {
public:
vector<int> res;

vector<int> rightSideView(TreeNode* root) {
dfs(root, 0);
return res;
}

void dfs(TreeNode* node, int depth) {
if (!node) return;

if (res.size() == depth) {
res.push_back(node->val);
}

dfs(node->right, depth + 1);
dfs(node->left, depth + 1);
}
};
```

```javascript
/**
* Definition for a binary tree node.
* class TreeNode {
* constructor(val = 0, left = null, right = null) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/

class Solution {
/**
* @param {TreeNode} root
* @return {number[]}
*/
rightSideView(root) {
let res = [];

function dfs(node, depth) {
if (!node) return;

if (res.length === depth) {
res.push(node.val);
}

dfs(node.right, depth + 1);
dfs(node.left, depth + 1);
}

dfs(root, 0);
return res;
}
}
```

```csharp
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/

public class Solution {
List<int> res = new List<int>();

public List<int> RightSideView(TreeNode root) {
dfs(root, 0);
return res;
}

private void dfs(TreeNode node, int depth) {
if (node == null) {
return;
}

if (res.Count == depth) {
res.Add(node.val);
}

dfs(node.right, depth + 1);
dfs(node.left, depth + 1);
}
}
```

::tabs-end

### Time & Space Complexity

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

---

## 2. Breadth First Search

::tabs-start

```python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right

class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
res = []
q = deque([root])

while q:
rightSide = None
qLen = len(q)

for i in range(qLen):
node = q.popleft()
if node:
rightSide = node
q.append(node.left)
q.append(node.right)
if rightSide:
res.append(rightSide.val)
return res
```

```java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/

class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> res = new ArrayList<>();
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);

while (!q.isEmpty()) {
TreeNode rightSide = null;
int qLen = q.size();

for (int i = 0; i < qLen; i++) {
TreeNode node = q.poll();
if (node != null) {
rightSide = node;
q.offer(node.left);
q.offer(node.right);
}
}
if (rightSide != null) {
res.add(rightSide.val);
}
}
return res;
}
}
```

```cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/

class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int> res;
queue<TreeNode*> q;
q.push(root);

while (!q.empty()) {
TreeNode* rightSide = nullptr;
int qLen = q.size();

for (int i = 0; i < qLen; i++) {
TreeNode* node = q.front();
q.pop();
if (node) {
rightSide = node;
q.push(node->left);
q.push(node->right);
}
}
if (rightSide) {
res.push_back(rightSide->val);
}
}
return res;
}
};
```

```javascript
/**
* Definition for a binary tree node.
* class TreeNode {
* constructor(val = 0, left = null, right = null) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/

class Solution {
/**
* @param {TreeNode} root
* @return {number[]}
*/
rightSideView(root) {
const res = [];
const q = new Queue();

q.push(root);

while (!q.isEmpty()) {
let rightSide = null;
const qLen = q.size();

for (let i = 0; i < qLen; i++) {
const node = q.pop();
if (node) {
rightSide = node;
q.push(node.left);
q.push(node.right);
}
}
if (rightSide) {
res.push(rightSide.val);
}
}
return res;
}
}
```

```csharp
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/

public class Solution {
public List<int> RightSideView(TreeNode root) {
List<int> res = new List<int>();
Queue<TreeNode> q = new Queue<TreeNode>();
q.Enqueue(root);

while (q.Count > 0) {
TreeNode rightSide = null;
int qLen = q.Count;

for (int i = 0; i < qLen; i++) {
TreeNode node = q.Dequeue();
if (node != null) {
rightSide = node;
q.Enqueue(node.left);
q.Enqueue(node.right);
}
}
if (rightSide != null) {
res.Add(rightSide.val);
}
}
return res;
}
}
```

::tabs-end

### Time & Space Complexity

* Time complexity: $O(n)$
* Space complexity: $O(n)$
Loading
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy