树的基本操作
#include<bits/stdc++.h>using namespace std;// 树是有限数据元素的集合 typedef struct Node{ int data; Node* lchild; Node* rchild;}*bitTree; // 建立带头结点二叉树bitTree initTree(){ Node* bt; bt = new Node(); bt->lchild = NULL; bt->rchild = NULL; return bt;} // 不带头//bt = NULL // 在二叉树bt的parent所指节点和其左子树之间插入节点bitTree insertL(bitTree bt, int x, bitTree parent){ Node* p; if(parent == NULL){ return NULL; } p = new Node(); p->data = x; p->lchild = NULL; p->rchild = NULL; if(parent->lchild == NULL) parent->lchild = p; else { p->lchild = parent->lchild; parent->lchild = p; } return bt;} // 在bt中删除parent的左子树bitTree deleteL(bitTree bt, bitTree parent){ Node* p; if(parent == NULL || parent->lchild == NULL){ return NULL; } p = parent->lchild; parent->lchild = NULL; free(p); return bt;} // 树的遍历void perOrder(bitTree bt){ if(bt == NULL){ return; } // Visit(bt); perOrder(bt->lchild); perOrder(bt->rchild);} // 中序,后序略 // 非递归遍历: //void NRPreOrder(bitTree bt){// Node* stack[100], p;// int top = 1;// if(bt == NULL) return;// p = bt;// while(!(p == NULL && top == -1)){// Visit(p);// top ++;// stack[top] = p;// p = p->lchild;// }// if(top<0) return;// else{// p = stack[p];// top--;// p = p->rchild;// }//} // 队列层次遍历void levelOrder(bitTree bt){ Node* queue[100]; int front, rear; if(bt == NULL) return; front = -1; rear = 0; queue[rear] = bt; while(front != rear){ front++;// Visit(queue[front]); if(queue[front]->lchild != NULL){ rear++; queue[rear] = queue[front]->lchild; } if(queue[front]->rchild != NULL){ rear++; queue[rear] = queue[front]->rchild; } }} // 递归计算树的层数(深度)int getTreeDepth(Node* root) { if (root == NULL) return 0; // 空树深度为0 // 递归计算左右子树的深度 int leftDepth = getTreeDepth(root->lchild); int rightDepth = getTreeDepth(root->rchild); // 返回左右子树深度的最大值加1 return max(leftDepth, rightDepth) + 1;} int main(){ }