red-black treee

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi guys plz correct me if im wrong. But it seems __rb_erase_color (
lib/rbtree.h ) violate property of the red-black tree ( both children
of the red node should be black )

I think instead:
[code]:
if ((!other->rb_left || rb_is_black(other->rb_left)) &&
     (!other->rb_right || rb_is_black(other->rb_right)))
 {
     rb_set_red(other);
     node = parent;
     parent = rb_parent(node);
 }
[/code]

should be thmth like this:
[code]
 if ( (!sibling->rb_left || rb_is_black(sibling->rb_left)  ) &&
      (!sibling->rb_right || rb_is_black(sibling->rb_right)) )
 {
      if ( rb_is_black(parent) ) {
            // all is black
             rb_set_red(sibling);
             node = parent;
             parent = rb_parent(node);
      } else {
             // parent is red , everything else black
             rb_set_black(parent);
             rb_set_red(sibling);
             node = root->rb_node;
             break;
      }
}
[/code]

Plz show me were im wrong! Thx.

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux