binary-tree-right-side-view
This commit is contained in:
		
							
								
								
									
										45
									
								
								binary-tree-right-side-view/sol.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								binary-tree-right-side-view/sol.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| package main | ||||
|  | ||||
| type TreeNode struct { | ||||
| 	Val   int | ||||
| 	Left  *TreeNode | ||||
| 	Right *TreeNode | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Definition for a binary tree node. | ||||
|  * type TreeNode struct { | ||||
|  *     Val int | ||||
|  *     Left *TreeNode | ||||
|  *     Right *TreeNode | ||||
|  * } | ||||
|  */ | ||||
| func rightSideView(root *TreeNode) (out []int) { | ||||
| 	if root == nil { | ||||
| 		return | ||||
| 	} | ||||
| 	for stack := []*TreeNode{root}; len(stack) != 0; { | ||||
| 		top := stack[len(stack)-1] | ||||
| 		if len(stack) > len(out) { | ||||
| 			out = append(out, top.Val) | ||||
| 		} | ||||
| 		if top.Right != nil { | ||||
| 			stack = append(stack, top.Right) | ||||
| 		} else if top.Left != nil { | ||||
| 			stack = append(stack, top.Left) | ||||
| 		} else { | ||||
| 			stack = stack[:len(stack)-1] | ||||
| 			if len(stack) != 0 { | ||||
| 				new_top := stack[len(stack)-1] | ||||
| 				// Easiest way to DFS by modification of tree. | ||||
| 				// There was no requirement to keep it intact ¯\_(ツ)_/¯. | ||||
| 				if new_top.Right == top { | ||||
| 					new_top.Right = nil | ||||
| 				} else { | ||||
| 					new_top.Left = nil | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
		Reference in New Issue
	
	Block a user