(1)方法建树
void insert(node* ptr_node , int data){//插入节点
node* temp_node = new node ;
if(head_flag){
ptr_node->value = data ;
head_flag = 0 ;
}else{
while(ptr_node){
temp_node = ptr_node ;
if(data < ptr_node->value){
flag = 0 ;
ptr_node = ptr_node->left_node ;
}else{
flag = 1 ;
ptr_node = ptr_node->right_node ;
}
}
ptr_node = new node ;
ptr_node->value = data ;
if(flag) temp_node->right_node = ptr_node ;
else temp_node->left_node = ptr_node ;
ptr_node->left_node = NULL ;
ptr_node->right_node = NULL ;
}
}
(2)方法建树
void InsertTree(Node* &tree, int key)
{
Node** p = &tree;
Node** temp = p ;
while((*p) != NULL)
{
if( key < (*p)->key )
p = &(*p)->left;
else p = &(*p)->right;
}
(*p) = new Node;
(*p)->key = key;
}
在写法1时 需要多写一步,将结点链接好。而法2 不需要多写这步 。其实在我看来方法1 与2 的根本区别是在法2能通过**p来确定 NULL的位置,法1new出来的位置已经不是原来的NULL 的位置了,所以要多写一步,而法2的(*p)还是原来的NULL 的位置,不需要链接,因为本来就在的。