1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| #include "binarySearchTree.h"
void insertVal(TreeNode **tree, int x) { if (*tree == NULL) { TreeNode *newNode = (TreeNode *)malloc(sizeof(TreeNode)); newNode->val = x; newNode->lchild = newNode->rchild = NULL; *tree = newNode; } else if (x == (*tree)->val) { assert(0 && "standard BST is not allow same val node!"); } else if (x < (*tree)->val) { insertVal(&(*tree)->lchild, x); } else { insertVal(&(*tree)->rchild, x); } }
TreeNode *createBinarySearchTree() { int input; TreeNode *retNod = NULL; while (scanf("%d", &input) == 1 && input != -1) { insertVal(&retNod, input); } return retNod; }
TreeNode *search(TreeNode *tree, int x) { TreeNode *pmove = tree; while (pmove) { if (x == pmove->val) return pmove; else if (x < pmove->val) { pmove = pmove->lchild; } else if (x > pmove->val) { pmove = pmove->rchild; } } return NULL; }
void deleteNode(TreeNode **tree, int x) { if ((*tree) == NULL) return; if (x < (*tree)->val) { deleteNode(&(*tree)->lchild, x); } else if (x > (*tree)->val) { deleteNode(&(*tree)->rchild, x); } else { if ((*tree)->lchild == NULL && (*tree)->rchild == NULL) { free(*tree); *tree = NULL; } else if ((*tree)->lchild != NULL && (*tree)->rchild != NULL) { TreeNode *successor = (*tree)->rchild; while (successor->lchild != NULL) { successor = successor->lchild; } int temp = (*tree)->val; (*tree)->val = successor->val; successor->val = temp; deleteNode(&(*tree)->rchild, temp); } else { if ((*tree)->lchild) { *tree = (*tree)->lchild; } else { *tree = (*tree)->rchild; } } } }
TreeNode *stack[100]; int top = -1; void inOrderTraverse(TreeNode *tree) { top = -1; while (top != -1 || tree != NULL) { if (tree == NULL) { printf("%d ", stack[top]->val); tree = stack[top--]->rchild; } else { stack[++top] = tree; tree = tree->lchild; } } }
TreeNode *q[100]; int hh = 0, tt = -1; void levelTraverse(TreeNode *tree) { q[++tt] = tree; while (hh <= tt) { TreeNode *temp = q[hh++]; printf("%d ", temp->val); if (temp->lchild != NULL) q[++tt] = temp->lchild; if (temp->rchild != NULL) q[++tt] = temp->rchild; } }
|