搜索二叉树线性函数

时间:2016-06-26 10:40:46

标签: algorithm

我正在尝试做一个小程序,它需要一个搜索二叉树。

计算每个节点:

  • 两个函数函数L(u)和R(u)
  • 其中L(u)是根据u
  • 生成的左子树中节点的键的总和
  • 和R(u)是右子树的总和。

该程序应具有输出:

  • 满足该属性L(u)* k
  • 按键的升序打印,其中k是输入中的整数。

问题是该函数必须具有线性复杂度,并且我不能使她小于n ^ 2.

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

基本上你需要计算子树中的键的总和。这是一个众所周知的问题。

func calc(node):
   if node is null:
       return 0
   node.lval = calc(node.left) # L(u)
   node.rval = calc(node.right) # R(u)
   return node.key + node.lval + node.rval

首先将lvalrval初始化为0。

现在你必须沿着树走(首先是左边,而不是右边)并检查条件。

func print(node):
   if has left child:
       print(node.left)
   if node.lval*k < node.rval:
       output node.key
   if has right child:
       print(node.right)