LeetCode Week 7
阿新 • • 發佈:2018-12-08
145. Binary Tree Postorder Traversal
Given a binary tree, return the postorder traversal of its nodes’ values.
solutions:
本題意是要求用迭代的方法而不是遞迴輸出一顆二叉樹的後序遍歷。
對於後序遍歷與之前的前序與中序不同的是,在訪問根節點之前需要對它的左右子樹進行判斷,對它的判斷可以分為兩種情況:
1.左右子樹是否都為空
2.左右子樹是否都已被訪問過
我們可以宣告一個指標來表示當前訪問節點的前一個訪問的節點(pre),幫助我們判斷是否是該訪問根節點。我們利用棧來儲存之前遍歷的樹節點,直到左右子樹為空(葉子節點),開始出棧。當棧為空時,遍歷結束。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> postorderTraversal(TreeNode* root) { vector<int> temp; //輸出 TreeNode* cur; //當前訪問節點 TreeNode* pre; //訪問的前一個節點 stack<TreeNode*> s; //棧 s.push(root); while(!s.empty()) { cur=s.top(); if((cur->left == NULL && cur->right == NULL) || (pre!=NULL&&(pre==cur->left||pre==cur->right))) { s.pop(); pre = cur; temp.push_back(cur->val); } else { if(cur->right != NULL) { s.push(cur->right); } if(cur->left != NULL) { s.push(cur->left); } } } return temp; } };