Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1
/
2 3
5
All root-to-leaf paths are:
["1->2->5", "1->3"]
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
很简单的题目,二叉树的遍历,为了追求挑战性,我选择非递归实现
vector<string> binaryTreePaths(TreeNode* root) { vector<string> out; if (root == nullptr) return out; vector<TreeNode*> sta; sta.push_back(root); TreeNode* lastRoot = root; while (!sta.empty()) { root = sta.back(); if (lastRoot != root->right) { if (lastRoot != root->left) { if (root->left != nullptr) { sta.push_back(root->left); continue; } } if (root->right != nullptr) { sta.push_back(root->right); continue; } else if (root->left == nullptr) { string str(to_string(sta[0]->val)); for (int i = 1; i < sta.size(); ++i) str.append("->" + to_string(sta[i]->val)); out.push_back(str); } } lastRoot = root; sta.pop_back(); } return out; }
至于DFS深度遍历,还是老老实实的使用visited标记记录每个节点吧。上面的方法只适用于二叉树