二叉樹中序遍歷Joseph M. Morris演算法
阿新 • • 發佈:2021-08-28
二叉樹中序遍歷,一種方法是遞迴,leetcode上的非遞迴方法有一種是用棧實現的,想來也沒多大優化,手動遞迴比自動遞迴也快不了多少。還有一種不用棧的非遞迴方法,是Joseph M. Morris發明的,這位元老就是KMP演算法中的M。
下面程式碼來自貼吧大神,經測試可用。我還沒研究具體是個怎麼回事,時間上能達到100%
vector<int> inorderTraversal(TreeNode* p) { vector<int> res; TreeNode* r = nullptr; while (p) { TreeNode* q = p->left; if (q) { while (q != r && q->right) q = q->right; if (q != r) { q->right = p; p = p->left; continue; } else q->right = NULL; } // printf("%d\n", p->val); res.push_back(p->val); r = p; p = p->right; } return res; }