Boundary of Binary Tree Posted on 2018-11-06 Descriptionhttps://leetcode.com/problems/boundary-of-binary-tree/ Solution1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253/** * 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> boundaryOfBinaryTree(TreeNode* root) { vector<int> ret; if (!root) return ret; ret.push_back(root->val); if (!root->left && !root->right) return ret; TreeNode* traverseLeft = root->left; while(traverseLeft && (traverseLeft->left || traverseLeft->right) ) { ret.push_back(traverseLeft->val); traverseLeft = traverseLeft->left ? traverseLeft->left : traverseLeft->right; } //Traverse all the left node traverseLeaf(ret, root); stack<int> st; TreeNode* traverseRight = root->right; //stack to store the right handside non-leaf node while (traverseRight && (traverseRight->right || traverseRight->left) ) { st.push(traverseRight->val); traverseRight = traverseRight->right ? traverseRight->right : traverseRight->left; } while(!st.empty()) { ret.push_back(st.top()); st.pop(); } return ret; } void traverseLeaf(vector<int>& ret, TreeNode* root) { if (root == NULL) return; if (root->left == NULL && root->right == NULL) ret.push_back(root->val); traverseLeaf(ret, root->left); traverseLeaf(ret, root->right); return; }};