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