// 树分别在"静态(即数组)实现"和"指针实现"方式下的 --------------------------------------------------------- // 基操(定义节点/建树/查改/插/遍历/重建): // 二叉树的指针实现方式: // 树节点的定义 struct node { int data; node* l; node* r; }; node* root = NULL; // 新建节点 node* newNode(int v) { node* Node = new node; Node->data = v; Node->l = Node->r = NULL; return Node; } // 节点的查找及修改 void search(node* root, int x, int newdata) { if(root == NULL) return; if(root->data == x) root->data = newdata; search(root->l, x, newdata); search(root->r, x, newdata); } // 插入新节点 void insert(node* &node, int x) { //注意引用 if(root == NULL) { root = newNode(x); return; } if(/*由二叉树的性质,x应该插在左子树*/) { insert(root->l, x); } else { insert(root->r, x); } } // 新建二叉树 node* create(int data[], int n) { node* root = NULL; for(int i=0; i<n; i++) { insert(root, data[i]); } return root; } // 二叉树的遍历和重建 略... // 二叉树的静态(即 数组)实现方式: // 定义节点(数组) struct node{ int data; int l; int r; } Node[MAXN]; // 生成节点 int index = 0; int newNode(int x) { Node[index].data = v; //只有指针方式才用到 " -> " Node[index].l = Node[index].r = -1; return index++; // 返回在数组中的下标 } // 节点的查找及修改 void search(int root, int x, int newdata) { if(root == -1) return; if(Node[root].data == x) { Node[root],data = newdata; return; } search(Node[root].l, x, newdata); search(Node[root].r, x, newdata); } // 插入 void insert(int &root, int x) { //注意引用 if(root == -1) { root = newdata(x); return; } if(/*由二叉树的性质,x应该插在左子树*/) { insert(Node[root].l, x); } else { insert(Node[root].r, x); } } // 树的静态写法: // 树的定义 struct node { int data; vector<int> child; //变长数组 //int child[maxn]; //存放所有子节点的下标 }Node [MAXN];
树分别在"静态(即数组)实现"和"指针实现"方式下的基操
猜你喜欢
转载自blog.csdn.net/chushoufengli/article/details/80033089
今日推荐
周排行