在二叉树中删除具有相同值的叶子

时间:2014-05-20 15:30:17

标签: binary-tree

我需要一个伪代码,使用给定的二叉树T,在每个节点中使用一个值,搜索并删除具有相同值的兄弟的所有叶子。 我需要一个最佳复杂度伪代码。

我猜它应该像这样的东西

deleteCopy(TREE T)  
if T != nil then
  if T.left = null and T.right = null
    if T.parent.right.left = null and T.parent.right.right = null
      if T.parent.left.value = T.parent.right.value then
        delete T
  deleteCopy(T.left())
  deleteCopy(T.right())

这是对的吗?

1 个答案:

答案 0 :(得分:0)

我不是这方面的专家,但你应该使用遍历算法。

inOrderSearch(Node n)
   inOrderSearch(n.left)
   check(n)
   inOrderSearch(n.right)

check(Node n)
   right = n.right
   left = n.left
   if right.left == null && right.right == null && left.left == null && left.right == null
       if right.value == left.value
           n.left = null

我选择了按顺序遍历,但在这种情况下,水平顺序更好。 在check子例程中,

  1. 得到两个兄弟姐妹(一个节点的孩子)
  2. 在第一个if语句中,它检查它们是否都是叶子。
  3. 在第二个if语句中检查
  4. 如果他们是平等的。如果它们相等,则删除左节点。这取决于你。
  5. 您可以开始使用根节点进行搜索。