Algorithm to Check if a Binary Tree can be Constructed via Hash

  • 时间:2020-10-07 14:14:07
  • 分类:网络文摘
  • 阅读:148 次

Have the function TreeConstructor(strArr) take the array of strings stored in strArr, which will contain pairs of integers in the following format: (i1,i2), where i1 represents a child node in a tree and the second integer i2 signifies that it is the parent of i1. For example: if strArr is [“(1,2)”, “(2,4)”, “(7,2)”], then this forms the following tree:

    4
   / 
  2  
 / \
1   7

which you can see forms a proper binary tree. Your program should, in this case, return the string true because a valid binary tree can be formed. If a proper binary tree cannot be formed with the integer pairs, then return the string false. All of the integers within the tree will be unique, which means there can only be one node in the tree with the given integer value.

Examples
Input: [“(1,2)”, “(2,4)”, “(5,7)”, “(7,2)”, “(9,5)”]
Output: true

Input: [“(1,2)”, “(3,2)”, “(2,12)”, “(5,2)”]
Output: false

Tags
array binary treedata engineer Google Facebook

Tree Constructor Algorithms using Hash Table

A valid tree should have the following characteristics:

  • A node should have at most 1 parent – the root does not have parents.
  • A node should have at most 2 children.

So, we can use two hash tables to record the number of parents and children for each node and return False immediately when we found violations.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def TreeConstructor(strArr):
  parents = {}
  children = {}
  for s in strArr:
    a, b = map(int, s.replace('(', '').replace(')', '').split(','))
    if a in parents:
      return False
    else:
      parents[a] = True
    if b in children:
      children[b] += 1
      if children[b] > 2:
        return False
    else:
      children[b] = 1
  return True
def TreeConstructor(strArr):
  parents = {}
  children = {}
  for s in strArr:
    a, b = map(int, s.replace('(', '').replace(')', '').split(','))
    if a in parents:
      return False
    else:
      parents[a] = True
    if b in children:
      children[b] += 1
      if children[b] > 2:
        return False
    else:
      children[b] = 1
  return True

The space complexity is O(N) and the time complexity is also O(N).

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
从右往左数,小兰排在第几个?  网站安全公司对个人隐私保护措施  网站渗透测试行业中需要文凭吗  友情链接:对网站排名作用都深入了解吗?  灵魂拷问自己:SEO是什么?疫情对SEO有什么影响?  案例分析:做谷歌SEO怎么选择更好的友情链接  404是什么意思?404错误页面是怎么造成的  Google SEO怎么用外链优化来增加网站权重  企业商家怎么做百度地图标注、优化排名、推广引流和营销?  网站优化排名,关键词上涨乏力,5个技巧突破瓶颈 
评论列表
添加评论