{"id":189,"date":"2023-10-23T20:56:21","date_gmt":"2023-10-23T12:56:21","guid":{"rendered":"https:\/\/www.vanforever.com.cn\/?p=189"},"modified":"2026-03-21T14:53:50","modified_gmt":"2026-03-21T06:53:50","slug":"morris%e7%ae%97%e6%b3%95%e5%ae%9e%e7%8e%b0%e9%81%8d%e5%8e%86","status":"publish","type":"post","link":"https:\/\/www.vanforever.com.cn\/?p=189","title":{"rendered":"morris\u7b97\u6cd5\u5b9e\u73b0\u904d\u5386"},"content":{"rendered":"<h1 id=\"morris\u4ee3\u7801\u5b9e\u73b0\u4e2d\u5e8f\u904d\u5386\">morris\u4ee3\u7801\u5b9e\u73b0\u4e2d\u5e8f\u904d\u5386<\/h1>\n<p>Morris \u904d\u5386\u7b97\u6cd5\u6574\u4f53\u6b65\u9aa4\u5982\u4e0b\uff08\u5047\u8bbe\u5f53\u524d\u904d\u5386\u5230\u7684\u8282\u70b9\u4e3a <code>x<\/code>\uff09\uff1a<\/p>\n<ul>\n<li>\u5982\u679c<code>x<\/code>\u65e0\u5de6\u5b69\u5b50\n<ul>\n<li><code>x<\/code>\u52a0\u5165\u7ed3\u679c<\/li>\n<li><code>x = x.right<\/code><\/li>\n<\/ul>\n<\/li>\n<li><code>x<\/code>\u6709\u5de6\u5b69\u5b50,\u627e<code>predecessor<\/code>(<code>x<\/code>\u5de6\u5b50\u6811\u4e0a\u7684\u6700\u53f3\u8282\u70b9)\n<ul>\n<li><code>predecessor<\/code>\u7684\u53f3\u5b69\u5b50\u4e3a\u7a7a,\u53f3\u5b69\u5b50\u6307\u5411<code>x<\/code>,<code>x=x.left<\/code><\/li>\n<li><code>predecessor<\/code>\u7684\u53f3\u5b69\u5b50\u4e0d\u4e3a\u7a7a,<code>x<\/code>\u52a0\u5165\u7ed3\u679c,<code>x=x.right<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u590d\u6742\u5ea6\u5206\u6790<\/p>\n<p>\u65f6\u95f4\u590d\u6742\u5ea6\uff1a<code>O(n)<\/code>\uff0c\u5176\u4e2d n \u4e3a\u4e8c\u53c9\u6811\u7684\u8282\u70b9\u4e2a\u6570\u3002Morris \u904d\u5386\u4e2d\u6bcf\u4e2a\u8282\u70b9\u4f1a\u88ab\u8bbf\u95ee\u4e24\u6b21\uff0c\u56e0\u6b64\u603b\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a <code>O(2n)=O(n)<\/code>\u3002<\/p>\n<p>\u7a7a\u95f4\u590d\u6742\u5ea6\uff1a<code>O(1)<\/code>\u3002<\/p>\n<pre><code class=\"language-c++\" lang=\"c++\">\/**\n * Definition for a binary tree node.\n * struct TreeNode {\n *     int val;\n *     TreeNode *left;\n *     TreeNode *right;\n *     TreeNode() : val(0), left(nullptr), right(nullptr) {}\n *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}\n *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}\n * };\n *\/\n\n\nclass Solution {\npublic:\n    vector&lt;int&gt; inorderTraversal(TreeNode* root) {\n        vector&lt;int&gt; res;\n        TreeNode *predecessor = nullptr;\n\n        while (root != nullptr) {\n            if (root-&gt;left != nullptr) {\n                \/\/ predecessor \u8282\u70b9\u5c31\u662f\u5f53\u524d root \u8282\u70b9\u5411\u5de6\u8d70\u4e00\u6b65\uff0c\u7136\u540e\u4e00\u76f4\u5411\u53f3\u8d70\u81f3\u65e0\u6cd5\u8d70\u4e3a\u6b62\n                predecessor = root-&gt;left;\n                while (predecessor-&gt;right != nullptr &amp;&amp; predecessor-&gt;right != root) {\n                    predecessor = predecessor-&gt;right;\n                }\n                \n                \/\/ \u8ba9 predecessor \u7684\u53f3\u6307\u9488\u6307\u5411 root\uff0c\u7ee7\u7eed\u904d\u5386\u5de6\u5b50\u6811\n                if (predecessor-&gt;right == nullptr) {\n                    predecessor-&gt;right = root;\n                    root = root-&gt;left;\n                }\n                \/\/ \u8bf4\u660e\u5de6\u5b50\u6811\u5df2\u7ecf\u8bbf\u95ee\u5b8c\u4e86\uff0c\u6211\u4eec\u9700\u8981\u65ad\u5f00\u94fe\u63a5\n                else {\n                    res.push_back(root-&gt;val);\n                    predecessor-&gt;right = nullptr;\n                    root = root-&gt;right;\n                }\n            }\n            \/\/ \u5982\u679c\u6ca1\u6709\u5de6\u5b69\u5b50\uff0c\u5219\u76f4\u63a5\u8bbf\u95ee\u53f3\u5b69\u5b50\n            else {\n                res.push_back(root-&gt;val);\n                root = root-&gt;right;\n            }\n        }\n        return res;\n    }\n};<\/code><\/pre>\n<div  class='collapse-block shadow-sm collapse-block-transparent collapsed hide-border-left'><div class='collapse-block-title'><span class='collapse-block-title-inner'>\u4e3b\u9898\u56fe\u7247<\/span><i class='collapse-icon fa fa-angle-down'><\/i><\/div><div class='collapse-block-body' style='display:none;'><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/Vanforever\/20231018\/wallhaven-yx28wl_3840x2400.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large\" data-original=\"https:\/\/pic.vanforever.com.cn\/Vanforever\/20231018\/wallhaven-yx28wl_3840x2400.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" width=\"3840\" height=\"2400\" \/><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>morris\u4ee3\u7801\u5b9e\u73b0\u4e2d\u5e8f\u904d\u5386 Morris \u904d\u5386\u7b97\u6cd5\u6574\u4f53\u6b65\u9aa4\u5982\u4e0b\uff08\u5047\u8bbe\u5f53\u524d\u904d\u5386\u5230\u7684\u8282\u70b9\u4e3a x\uff09\uff1a \u5982\u679cx\u65e0\u5de6\u5b69 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[12],"class_list":["post-189","post","type-post","status-publish","format-standard","hentry","category-c","tag-12"],"_links":{"self":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=189"}],"version-history":[{"count":10,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/189\/revisions"}],"predecessor-version":[{"id":581,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/189\/revisions\/581"}],"wp:attachment":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}