Morris遍历

来源:互联网 发布:淘宝货到付款是现金么 编辑:程序博客网 时间:2024/06/05 22:47

Morris遍历最主要的特点是不需要堆栈,其空间复杂度为O(1),算法的核心步骤在于,找到当前节点左子树的最右节点,将该节点的右指针指向当前节点,从而在进入左子树之后,可以循此虚拟的连接回到当前节点。在左子树访问结束后,还要消除该虚拟连接,恢复原二叉树的结构。

Morris遍历的C++代码结构如下:

TreeNode *cur, *prev;cur = root;while (cur != nullptr) {if (cur->left == nullptr) {//do sth.prev = cur; /* */cur = cur->right;} else {TreeNode *node = cur->left;while (node->right != nullptr && node->right != cur)node = node->right;if (node->right == nullptr) { //visit curnode->right = cur;//prev = cur; //only if cur is just visited herecur = cur->left;} else { /*left has finished*/node->right = nullptr;// prev = cur; //only if cur is just visited herecur = cur->right;}}}


0 0
原创粉丝点击