数据结构《10》----二叉树 Morris 中序遍历
来源:互联网 发布:苹果手机拨号软件 编辑:程序博客网 时间:2024/05/29 02:26
无论是二叉树的中序遍历还是用 stack 模拟递归, 都需要 O(n)的空间复杂度。
Morris 遍历是一种 常数空间 的遍历方法,其本质是 线索二叉树(Threaded Binary Tree), 本质上其实就是利用二叉树中 n+1 个指向NULL的指针。
关于 线索二叉树 见 http://blog.csdn.net/shoulinjun/article/details/19037819
Morris 遍历在遍历的过程中,通过利用叶子节点空的right指针,指向中序遍历的后继节点,从而避免了对 stack 的依赖。
// Morris Traversal// space effienctvoid InOrderVisitMorris(TreeNode *root){ TreeNode *pre(NULL); while(root) {// 左子树是空,直接访问该节点,然后访问右子树 if(root->left_child == NULL){ cout << root->value << " "; root = root->right_child; continue;}// 找 root 的前驱节点for(pre = root->left_child; pre->right_child && pre->right_child != root; pre = pre->right_child);// 第一次访问root, 建立线索if(pre->right_child == NULL){ pre->right_child = root; root = root->left_child;}// 第二次访问,说明左子树已经访问过else{ pre->right_child = NULL; cout << root->value << " "; root = root->right_child;} }}
3 0
- 数据结构《10》----二叉树 Morris 中序遍历
- 数据结构《13》----二叉树 Morris 前序遍历
- Morris遍历二叉树
- Morris 二叉树遍历
- Morris遍历二叉树
- morris 遍历二叉树
- Morris二叉树遍历算法
- Morris遍历二叉树算法
- Morris Traversal 遍历二叉树
- Morris二叉树遍历算法
- Morris二叉树遍历算法
- Morris二叉树遍历算法
- Morris二叉树遍历算法
- Morris方法遍历二叉树
- Morris方法遍历二叉树
- Morris二叉树遍历算法
- Morris算法遍历二叉树
- Morris二叉树遍历算法
- 写给自己
- Android基础篇(一)
- Linux命令详解之passwd
- Python学习笔记(1)
- 内存对齐
- 数据结构《10》----二叉树 Morris 中序遍历
- Red and Black
- Android指定特定的包接受广播
- Linux命令详解之su
- ASCII码排序
- SRM 596 D2 L2:ColorfulRoad,dp
- 继续畅通工程
- Linux命令详解之uname
- Linux命令详解之id