struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
//先序遍历递归版本
vector<int> result;
vector<int> preorderTraversal(TreeNode *root) {
if (root!=NULL)
{
result.push_back(root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
return result;
}
//先序遍历栈版本1(数组)
const int maxsize =1000;
vector<int> preorderTraversal(TreeNode *root) {
vector<int> result;
TreeNode *st[maxsize],*p;
int top=-1;
if (root!=NULL)
{
top++;
st[top]=root;
while(top>-1)
{
p=st[top];
top--;
result.push_back(p->val);
if (p->right!=NULL)
{
top++;
st[top]=p->right;
}
if (p->left!=NULL)
{
top++;
st[top]=p->left;
}
}
}
return result;
}
//先序遍历栈版本2(STL)
vector<int> preorderTraversal(TreeNode *root) {
vector<int> result;
TreeNode *p;
stack<TreeNode *> st;
if (root!=NULL)
{
st.push(root); //根节点进栈
while(!st.empty())
{
p=st.top(); //退栈并访问该节点
st.pop();
result.push_back(p->val);
if (p->right!=NULL) //右孩子先进栈
{
st.push(p->right);
}
if (p->left!=NULL)
{
st.push(p->left);
}
}
}
return result;
}
[leetcode]二叉树先序遍历
最新推荐文章于 2022-05-31 19:52:42 发布
