C 二叉树
来源:互联网 发布:windows文件命名原则 编辑:程序博客网 时间:2024/06/13 03:19
#pragma once//定义一个结构体typedef struct _NODE{ int index; char* name; struct _NODE* left; struct _NODE* right;}NODE;
#include "BTree.h"#include <stdlib.h>#include <string.h>#define nodes (* node)int _ins(NODE* root, NODE** node){ if (nodes->index < root->index) { if (root->left == NULL) { root->left = nodes; return 1; } else { _ins(root->left, node); return 1; } } else { if (root->right == NULL) { root->right = nodes; return 1; } else { _ins(root->right, node); return 1; } } return 0;}#undef nodesint _insert(NODE** root, int index, const char* name){ NODE* node = (NODE*)malloc(sizeof(NODE)); memset(node, 0x00, sizeof(NODE)); node->name = (char*)malloc(8); memset(node->name, 0x00, sizeof(node->name)); strcpy(node->name, name); node->index = index; node->left = NULL; node->right = NULL; if (*root==NULL) { *root = node; return 1; } return _ins(*root, &node)>0 ? 1 : 0;}int _modify(NODE* root, int index, const char* newName){ if (index==root->index) { strcpy(root->name,newName); return 1; } else { if (index < root->index) { if (root->left!=NULL) { _modify(root->left,index, newName); } return 0; } else { if (root->right != NULL) { _modify(root->right, index, newName); } return 0; } } return 0;}void _find(NODE* root ,const char* name,NODE** p){ if (root->left != NULL && (0 == strcmp(name, root->left->name)) || root->right != NULL && (0 == strcmp(name, root->right->name))) { *p = root; return; } if (0 == strcmp(name, root->name)) { *p = root; return; } else { if (root->right != NULL) { _find(root->right,name,p); } if (root->left != NULL) { _find(root->left,name,p); } return; } return;}void _finds(NODE* root , NODE** pp){ if (root->right->right == NULL) { *pp = root; return; } else { _finds(root->right, pp); }}int _remove(NODE** root, const char* name){ NODE* p = NULL; _find(*root,name,&p); NODE* pp = NULL; if (p==NULL) { return 0; } if (0==strcmp(name,p->left->name)) { if (p->left->left==NULL && p->left->right==NULL) { free(p->left); p->left = NULL; return 1; } if (p->left->left->right == NULL) { pp = p->left; p->left->left->right = p->left->right; p->left = p->left->left; free(pp); return 1; } if (p->left->left!=NULL) { _finds(p->left->left, &pp); pp->right->right = p->left->right; pp->right->left = p->left->left; free(p->left); p->left = pp->right; pp->right = NULL; return 1; } } else if (0 == strcmp(name, p->right->name)) { if (p->right->left==NULL && p->right->right==NULL) { free(p->right); p->right = NULL; return 1; } if (p->right->left ->right == NULL) { pp = p->right; p->right->left->right = p->right->right; p->right = p->right->left; free(pp); return 1; } if (p->right->left != NULL) { _finds(p->right->left, &pp); pp->right->right = p->right->right; pp->right->left = p->right->left; free(p->right); p->right = pp->right; pp->right = NULL; return 1; } } else { _finds( p->left , &pp); pp->right->right = p->right; pp->right->left = p->left; free(*root); *root = pp->right; pp->right = NULL; return 1; } return 0;}void _show(NODE* root ){ printf("%d %s ",root->index,root->name); if (root->right != NULL) { _show(root->right); } if (root->left!=NULL) { _show(root->left); } return;}
阅读全文
0 0
- C语言版--二叉树
- btree-C二叉树
- 数据结构(C++)--二叉树
- C二叉树
- C语言版--二叉树
- 二叉查找树(C#)
- C语言 二叉树
- c的二叉树
- 二叉树 c实现
- 二叉树(数据结构 c++)
- c语言 二叉树
- 二叉树(C++)
- [c]二叉树
- 【数据结构】二叉树(c++)
- 二叉树(C语言)
- 二叉搜索树(c++)
- [C++]二叉树总结
- <<c>>二叉查找树
- JVM性能调优
- The Obsidian Go is a 3D, 360 4K camera with a more palatable price tag
- 在网上查找资料,学习define和inline的区别
- angularjs2运行出现此报错,原因分析 Tried to find bootstrap code, but could not specify either statically analyza
- 进程的替换
- C 二叉树
- Golang 常用字符串处理方法
- 按钮enter响应问题
- 简单的链表存储和搜索例子(完整的增删查改)
- 微服务
- Goland软件使用教程(二)
- 使用 IO 流,将多个文件合并成一个文件
- linux进程控制编程
- 一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。