二叉树的插入函数
来源:互联网 发布:微机室网络还原软件 编辑:程序博客网 时间:2024/04/30 02:00
BinaryTree Inseart(int num[],int length){ if(num==NULL||length<=0) return NULL; BinaryTree pRoot; BinaryTreeNode *node=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode)); node->m_nValue=num[0]; node->m_pLeft=NULL; node->m_pRight=NULL; pRoot=node;BinaryTreeNode* pNode=pRoot; for(int i=1;i<length;i++) { node=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode)); node->m_nValue=num[i]; node->m_pLeft=NULL; node->m_pRight=NULL; while(pNode!=NULL) { if(node->m_nValue < pNode->m_nValue) { pNode=pNode->m_pLeft; } else { pNode=pNode->m_pRight; } }pNode=node; } return pRoot;}
写完上面的的程序后认为没有差错,但是在验证时却发现,只有一个根元素。竟然是断开的二叉树,为什么呢?通过调试发现了问题,原来在新建一个node后,他的左右节点是NULL,即地址没有,但是在进行扫描时我们是通过pNode!=NULL 来判断的,找到了要插入的位置,然后pNode=node,这样就把插入节点node连接到二叉树中,但是pNode的初始地址是NULL,经过pNode=node后,pNode的地址就是node的地址了,与二叉树的地址NULL是没有关系的,也就连接不上,所以出现了问题。那怎么解决呢?
我们发现,当找到一个节点的进行插入左或右子节点,而左或右子节点为NULL那么就在NULL处pNode->left=node或者pNode->right=node;赋值完值后就说明已经插入了,可以退出循环。
BinaryTree Init(int num[],int length){ if(num==NULL||length<=0) return NULL; BinaryTree pRoot; BinaryTreeNode *node=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode)); node->m_nValue=num[0]; node->m_pLeft=NULL; node->m_pRight=NULL; pRoot=node; for(int i=1;i<length;i++) { node=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode)); node->m_nValue=num[i]; node->m_pLeft=NULL; node->m_pRight=NULL; BinaryTreeNode* pNode=pRoot;while(pNode->m_pLeft!=node && pNode->m_pRight!=node) { if(node->m_nValue < pNode->m_nValue) {if(pNode->m_pLeft)pNode=pNode->m_pLeft;else pNode->m_pLeft=node; } else {if(pNode->m_pRight)pNode=pNode->m_pRight;elsepNode->m_pRight=node; } } } return pRoot;}
0 0
- 二叉树的插入函数
- 二叉搜索树的插入
- 二叉树排序的插入
- 二叉树的递归插入
- 二叉搜索树的插入
- 平衡二叉树的的插入
- 二叉树搜索树的插入算法
- 二叉树(BST树)的插入
- 二叉搜索树的查找、插入、删除
- 平衡二叉树插入的实现
- 二叉搜索树的根节点插入
- 二叉搜索树的插入和删除
- 排序二叉树的插入和删除
- 平衡二叉树的插入、删除
- 二叉查找树的插入,删除,查找
- C++二叉树的构造和插入
- 二叉查找树的插入,删除,查找
- 二叉搜索树的插入,查找,删除
- gdb调试
- numpy-nditer
- C++第4次实验 项目6:输出星号图
- 看板中的粉色卡
- servlet重定向到jsp后,css样式和图片都没了,解决办法
- 二叉树的插入函数
- Ubuntu16.04+Pycharm+Anaconda配置
- Android用命名含sw的文件夹做屏幕适配原理
- 数据结构-图的基本概念
- 监测同名进程,防止重复调用
- TCP 与 UDP
- Java8学习笔记之Lambda表达式
- Leetcode 297. Serialize and Deserialize Binary Tree
- 供个人开发者免费使用的一些API接口网站推荐