比较两棵树之间差异的算法有哪些?

时间:2019-09-03 23:43:45

标签: algorithm tree comparison string-comparison difference

我正在寻找比较两个树结构的差异。

节点将是字符串。我想捕获它发生在树的哪个级别。

例如,找出这两棵树之间的差异:

enter image description here

1 个答案:

答案 0 :(得分:0)

基本思想是逐级遍历两个树。找到后,

  

节点不相同

  

节点的结构不同

意味着您在这里发现了不同!现在,您可以根据需要标记级别或节点。

PSEDOCODE

function getDiff(Tree root, Tree root1){
   Queue queue->push(root);
   Queue queue1->push(root1);
   level = 1;
   while(queue->size() != 0 && queue1->size() != 0){
      if(queue->size() != queue1->size()) {
            PRINT: "THE TREE AREN'T IN SAME STRUCTURE :/";
            return;
      }

      size = queue->size();
      /* traversing both trees level-by-level */
      while(size-- > 0){
           Tree temp = queue->peek();
           Tree temp1 = queue1->peek();

           queue->pop();
           queue1->pop();

            if(!temp->node != temp1->node) {
                  PROCESS: level;
            }
            if(temp->left != null && temp1->left != null) {
                queue->push(temp->left);
                queue1->push(temp1->left);
            }

            if(temp->right!= null && temp1->right!= null) {
                queue->push(temp->right);
                queue1->push(temp1->right);
            }
        }
        /* increase level */
        level += 1;
    }
}

注意:将密码更改为您喜欢的语言:)