有关二叉树的部分操作
来源:互联网 发布:找淘宝达人推广的技巧 编辑:程序博客网 时间:2024/05/17 06:37
struct TreeNode{ ElemtType val; TreeNode *left,*right;};
1.判定一棵二叉树是否是完全二叉树
借助于层次遍历的算法,将所有结点入队列,包括空结点。出队遇到空结点时,查看其后是否有非空结点,若有,则不是完全二叉树。
bool isComplete(TreeNode* root){ TreeNode* Q[MaxSize]; int front = -1, rear = -1; if (!root) return true; Q[++rear] = root; while (front != rear){ root = Q[++front]; if (root){ Q[++rear] = root->left; Q[++rear] = root->right; } else{ while (front != rear){ root = Q[++front]; if (root) return false; } } } return true; }
2.求先序遍历序列中第K(1<=k <= n)个结点的值。
设置一个引用变量i记录已经访问过的结点的序号,初值设为0。当前二叉树b为空时返回一个特殊字符’#’。当i==k,表示找到满足条件的结点;当i!=k时,则递归地在左子树中查找,若找到返回该值,否则继续递归地在右子树中查找。
ElemType getK(TreeNode* root, int& n,int k){ if (!root) return '#'; n++; if (n == k) return root->val; ElemType temp=getK(root->left, n, k); if (temp != '#') return temp; return getK(root->right, n,k); }
3.对于二叉树中每一个元素为x的结点,删去以它为根的子树,并释放相应的空间。
删除以元素值x为根的子树,只要能删除其左、右子树,就可以释放值为x的根节点。在后序遍历的基础上进行删除某一结点的左右子树,并将该结点的左右指针设为NULL。
需要注意的是参数为引用值。
void Delete(TreeNode*& root){ if (root){ Delete(root->left); Delete(root->right); delete root; root = NULL; } } void DeleteX(TreeNode*& root, int x){ if (!root) return; DeleteX(root->left, x); DeleteX(root->right, x); if (root->val == x) Delete(root); }
4.在二叉树中查找值为x的结点,打印该结点的所有祖先。假设值为x的结点不多于1个。
采用后序遍历,最后访问根节点,当访问到值为x的结点时,栈中所有元素均为该结点的祖先。
void printFore(TreeNode* root, ElemType x){ Stack s[MaxSize]; int top = 0; while (root || top != 0){ while (root&&root->val != x){ s[++top].t = root; s[top].tag = 0; root = root->left; } if (root&&root->val == x){ for (int i = 1; i <= top; i++){ cout << s[top].t->val << " "; } cout << endl; return; } while (top != 0 && s[top].tag == 1) top--; if (top != 0){ s[top].tag = 1; root = s[top].t->right; } } }
0 0
- 有关二叉树的部分操作
- 二叉树的有关操作
- 二叉树的有关操作
- 二叉树的有关操作
- 二叉树的部分操作
- 有关树二叉树的一些操作
- 有关二叉树操作的代码实现
- 二叉树的部分操作实现
- 数据结构中二叉树的有关操作汇总
- iOS有关uilable的部分操作
- 二叉树性质和有关操作汇总
- 二叉树的基本操作及部分面试题
- 二叉树的基本操作及部分面试题
- 有关二叉树的计算
- 有关二叉树的中序遍历
- 有关二叉树的简单实现
- 有关二叉树的常见算法
- 有关二叉树的遍历问题
- 汇编中的变量
- 博客诞生记
- 【SICP练习】124 练习3.55
- 抽象方法(abstract class)与接口(interface)比较
- stl源码剖析 详细学习笔记 算法总览
- 有关二叉树的部分操作
- stl源码剖析 详细学习笔记 算法(1)
- 项目远程调试
- HDU 4465 Candy 概率 (2012成都区域赛B题)
- android服务与activity通讯
- Java之美[从菜鸟到高手演变]之智力题
- 设计模式大全
- iOS开发中的UIWindow
- 事件监听,内部类