//中序遍历递归版本
vector<int> result;
vector<int> inorderTraversal(TreeNode *root) {
if (root!=NULL)
{
inorderTraversal(root->left);
result.push_back(root->val);
inorderTraversal(root->right);
}
return result;
}
//中序遍历栈版本1(数组)
const int maxsize =1000;
vector<int> inorderTraversal(TreeNode *root) {
vector<int> result;
TreeNode *st[maxsize],*p;
int top=-1;
if (root!=NULL)
{
p=root;
while (top>-1||p!=NULL) //处理root节点的左子树
{
while(p!=NULL) //扫描*p的所有左节点并进栈
{
top++;
st[top]=p;
p=p->left;
}
if (top>-1)
{
p=st[top]; //出栈*p节点
top--;
result.push_back(p->val); //访问
p=p->right; //处理*p的右孩子节点
}
}
}
return result;
}
//中序遍历栈版本2(STL)
vector<int> inorderTraversal(TreeNode *root) {
vector<int> result;
TreeNode *p;
stack<TreeNode *> st;
if (root!=NULL)
{
p=root;
while (!st.empty()||p!=NULL) //处理root节点的左子树
{
while(p!=NULL) //扫描*p的所有左节点并进栈
{
st.push(p);
p=p->left;
}
if (!st.empty())
{
p=st.top(); //出栈*p节点
st.pop();
result.push_back(p->val); //访问
p=p->right; //处理*p的右孩子节点
}
}
}
return result;
}
[leetcode]二叉树中序遍历
最新推荐文章于 2024-06-23 15:19:58 发布