非遞歸的中序遍歷(inorder)樹 leetcode 94
阿新 • • 發佈:2018-07-17
ont treenode inorder urn 左右子樹 rsa clas 遞歸 stack
1 class Solution { 2 public: 3 vector<int> inorderTraversal(TreeNode* root) { 4 stack<TreeNode*> s; 5 vector<int> val; 6 TreeNode* curr = root; 7 s.push(curr); 8 while(!s.empty()) { 9 while(curr) { 10 s.push(curr->left);11 curr = curr->left; 12 } 13 curr = s.top(); 14 s.pop(); 15 if (curr) { 16 val.push_back(curr->val); 17 curr = curr->right; 18 if (curr) s.push(curr); 19 } 20} 21 return val; 22 } 23 };
非遞歸時需要保留結點的父結點,這裏使用棧
首先把該結點的所有左節點都放在棧裏(8-12)
然後拿出一個結點,判斷是不是空結點
不是空結點就輸出,並將其右結點加入棧內
這樣就保證先輸出左子樹,然後輸出左子樹的右子樹,若左子樹是葉子結點則為空,輸出自己
然後將右結點加入棧中,重復以上過程
左右子樹輸出完畢時,curr總是指向空的右節點,不執行內層while
按入棧順序對父結點操作
非遞歸的中序遍歷(inorder)樹 leetcode 94