在PHP中删除/折叠二叉树

a64a0gku  于 2022-11-21  发布在  PHP
关注(0)|答案(1)|浏览(135)

我有一张这样的table

----------------------------------
CUSTOMER_ID    | REF_CUSTOMER_ID |   
----------------------------------
1              | NULL            | 
2              | 1               | 
3              | 2               | 
4              | 2               | 
5              | 3               |
6              | 3               | 
7              | 4               |
8              | 4               |  
9              | 1               |  
----------------------------------

从该表可知,2是1的孩子,3、4是2的孩子,以此类推,这使得树看起来像这样

1
                |
        ------------------
        |                |
        2                9
        |                |
    -----------     
    |        |                
    3        4   
    |        |
  -----    -----
  |   |    |   |
  5   6    7   8

好的,在每个父节点有2个子节点和4个叶子节点之后,2有3和4的子节点和5,6,7,8的叶子节点,这棵树必须折叠,这意味着它只剩下1,但是因为2是1的子节点,3,4是1的叶子节点,而1还没有完成它的循环,所以1还不能折叠。
问题

如何仍然将2的树折叠为根,但维护1的树及其子级和叶级?如何实现这一点?是否必须创建另一个表?或者只使用现有表?

yh2wf1be

yh2wf1be1#

你不必使用附加表,你可以使用递归删除树:
伪代码:

function deleteChildBranches(node)
{
    get left and right child nodes
    if(there's left branch node)
       deleteANode(left branch node)
    if(there's right branch node)
       deleteANode(right branch node)       
}

function deleteANode(node)
{
    get left and right child nodes
    if(there's left branch node)
       deleteANode(left branch node)
    if(there's right branch node)
       deleteANode(right branch node)
    delete this node
}

这段代码首先会遍历一棵树到底部,从底部到顶部删除节点。

相关问题