1 排序二叉树的插入
分析:
1) 对当前的参数进行判断,因为需要考虑到头结点,所以我们使用了指针的指针作为函数的输入参数
2) 分情况讨论:
如果原来二叉树连根节点都没有,那么这个新插入的数据就是根节点;
如果原来的二叉树有根节点,那我们判断这个数据是否存在过,如果存在,那么返回;如果不存在,那么继续插入数据。
那继续插入的数据怎么保存呢?又要分三种情况:
1)如果插入的数据小于当前节点的数据,那么往当前节点的左子树方向继续寻找插入位置
2)如果插入的数据大于当前插入的位置,那么往当前节点的右子树方向继续寻找插入位置
3)如果方向当前的节点为空,那么表示插入的位置找到了,插入数据即可
1.1 数据的合法性
int insert_node_into_tree(TREE_NODE** ppTreeNode, int data)
{
if(NULL == ppTreeNode)
return 0;
return 1;
}
1.2 假设根节点不存在
int insert_node_into_tree(TREE_NODE** ppTreeNode, int data)
{
if(NULL == ppTreeNode)
return 0;
if(NULL == *ppTreeNode){
*ppTreeNode = (TREE_NODE*)create_tree_node(data);
return 1;
}
return 1;
}
1.3 假设根节点存在
int _insert_node_into_tree(TREE_NODE** ppTreeNode, int data, TREE_NODE* pParent)
{
if(NULL == *ppTreeNode){
*ppTreeNode = create_tree_node(data);
(*ppTreeNode)->parent = pParent;
return 0;
}
if(data < (*ppTreeNode)->data)
return _insert_node_into_tree(&(*ppTreeNode)->left_child, data, *ppTreeNode);
else
return _insert_node_into_tree(&(*ppTreeNode)->right_child, data, *ppTreeNode);
}
STATUS insert_node_into_tree(TREE_NODE** ppTreeNode, int data)
{
if(NULL == ppTreeNode)
return 0;
if(NULL == *ppTreeNode){
*ppTreeNode = (TREE_NODE*)create_tree_node(data);
return 1;
}
return _insert_node_into_tree(ppTreeNode, data, NULL);
}