规范格式

This commit is contained in:
YDZ
2020-08-07 15:50:06 +08:00
parent 854a339abc
commit 4e11f4028a
1438 changed files with 907 additions and 924 deletions

View File

@ -0,0 +1,87 @@
package leetcode
import "container/heap"
import (
"github.com/halfrost/LeetCode-Go/structures"
)
// TreeNode define
type TreeNode = structures.TreeNode
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
// BSTIterator define
type BSTIterator struct {
pq PriorityQueueOfInt
count int
}
// Constructor173 define
func Constructor173(root *TreeNode) BSTIterator {
result, pq := []int{}, PriorityQueueOfInt{}
postorder(root, &result)
for _, v := range result {
heap.Push(&pq, v)
}
bs := BSTIterator{pq: pq, count: len(result)}
return bs
}
func postorder(root *TreeNode, output *[]int) {
if root != nil {
postorder(root.Left, output)
postorder(root.Right, output)
*output = append(*output, root.Val)
}
}
/** @return the next smallest number */
func (this *BSTIterator) Next() int {
this.count--
return heap.Pop(&this.pq).(int)
}
/** @return whether we have a next smallest number */
func (this *BSTIterator) HasNext() bool {
return this.count != 0
}
/**
* Your BSTIterator object will be instantiated and called as such:
* obj := Constructor(root);
* param_1 := obj.Next();
* param_2 := obj.HasNext();
*/
type PriorityQueueOfInt []int
func (pq PriorityQueueOfInt) Len() int {
return len(pq)
}
func (pq PriorityQueueOfInt) Less(i, j int) bool {
return pq[i] < pq[j]
}
func (pq PriorityQueueOfInt) Swap(i, j int) {
pq[i], pq[j] = pq[j], pq[i]
}
func (pq *PriorityQueueOfInt) Push(x interface{}) {
item := x.(int)
*pq = append(*pq, item)
}
func (pq *PriorityQueueOfInt) Pop() interface{} {
n := len(*pq)
item := (*pq)[n-1]
*pq = (*pq)[:n-1]
return item
}

View File

@ -0,0 +1,29 @@
package leetcode
import (
"fmt"
"testing"
"github.com/halfrost/LeetCode-Go/structures"
)
func Test_Problem173(t *testing.T) {
root := structures.Ints2TreeNode([]int{9, 7, 15, 3, structures.NULL, structures.NULL, 20})
obj := Constructor173(root)
fmt.Printf("obj = %v\n", obj)
param1 := obj.Next()
fmt.Printf("param_1 = %v\n", param1)
param2 := obj.HasNext()
fmt.Printf("param_2 = %v\n", param2)
param1 = obj.Next()
fmt.Printf("param_1 = %v\n", param1)
param1 = obj.Next()
fmt.Printf("param_1 = %v\n", param1)
param1 = obj.Next()
fmt.Printf("param_1 = %v\n", param1)
param1 = obj.Next()
fmt.Printf("param_1 = %v\n", param1)
param2 = obj.HasNext()
fmt.Printf("param_2 = %v\n", param2)
}

View File

@ -0,0 +1,38 @@
# [173. Binary Search Tree Iterator](https://leetcode.com/problems/binary-search-tree-iterator/)
## 题目
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.
Calling `next()` will return the next smallest number in the BST.
**Example:**
![](https://assets.leetcode.com/uploads/2018/12/25/bst-tree.png)
BSTIterator iterator = new BSTIterator(root);
iterator.next(); // return 3
iterator.next(); // return 7
iterator.hasNext(); // return true
iterator.next(); // return 9
iterator.hasNext(); // return true
iterator.next(); // return 15
iterator.hasNext(); // return true
iterator.next(); // return 20
iterator.hasNext(); // return false
**Note:**
- `next()` and `hasNext()` should run in average O(1) time and uses O(h) memory, where h is the height of the tree.
- You may assume that `next()` call will always be valid, that is, there will be at least a next smallest number in the BST when `next()` is called.
## 题目大意
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。
## 解题思路
- 用优先队列解决即可