两数之和 IV - 输入 BST(golang)

薇清潜 · · 302 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

原题:两数之和 IV - 输入 BST

方法一:

中序遍历,有序存放到一个数组中,通过两数之和 II - 输入有序数组(golang)即可解。

func findTarget(root *TreeNode, k int) bool {
    arr := DFS(root)
    for l, r := 0, len(arr)-1; l < r; {
        sum := arr[l] + arr[r]
        if sum < k {
            l ++
        } else if sum > k {
            r --
        } else {
            return true
        }
    }
    return false
}
func DFS(node *TreeNode) []int {
    // 左根右
    if node == nil {
        return []int{}
    }
    arr := DFS(node.Left)
    arr = append(arr, node.Val)
    arr = append(arr, DFS(node.Right)...)
    return arr
}

方法二:

类似两数之和(golang)使用map存储已经遍历过结点值

func findTarget(root *TreeNode, k int) bool {
    m := make(map[int]bool)
    return DFS(root, k, m)
}
func DFS(node *TreeNode, k int, m map[int]bool) bool {
    if node == nil {
        return false
    }
    if _, ok := m[k-node.Val]; ok {
        return true
    }
    m[node.Val] = true
    if DFS(node.Left, k, m) || DFS(node.Right, k, m) {
        return true
    }
    return false
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:薇清潜

查看原文:两数之和 IV - 输入 BST(golang)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

302 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传