题目链接:click~
DFS解法:
/*题意:二叉树的中序遍历*/
class Solution {
public:
void InOrderTraverse(TreeNode *root, vector<int> &v) {
if(root == NULL) return;
InOrderTraverse(root->left, v);
v.push_back(root->val);
InOrderTraverse(root->right, v);
}
vector<int> inorderTraversal(TreeNode *root) {
vector<int> v;
if(root == NULL) return v;
InOrderTraverse(root, v);
}
};
栈模拟递归:
/**
*思路:初始化时,将从根结点到最左结点路径上的所有结点压入栈中,栈顶即为
* 最左结点,打印栈顶元素,然后将其右子树下到最左结点路径压入栈。
*/
class Solution {
private:
vector<int> v;
public:
void pushleft(TreeNode *root, stack<TreeNode*> &s) {
if(root != NULL) {
s.push(root);
pushleft(root->left, s);
}
}
vector<int> inorderTraversal(TreeNode *root) {
if(root == NULL) return v;
stack<TreeNode*> s;
pushleft(root, s);
while(!s.empty()) {
TreeNode *tmp = s.top();
s.pop();
v.push_back(tmp->val);
pushleft(tmp->right, s);
}
return v;
}
};