标签:
Given a binary tree, return the inorder traversal of itsnodes‘ values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,3,2].
Note: Recursive solution istrivial, could you do it iteratively?
confused what "{1,#,2,3}" means? > read moreon how binary tree is serialized on OJ.
HideTags
#pragma once #include<iostream> #include<vector> #include<stack> using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; vector<int> inorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode*> s; TreeNode* p = root; int flag = 0;//节点p的左孩子是否已经遍历的标志,flag=0应向左,flag=1应向右遍历 while (p) { if (flag==0&&p->left)//有左且左未遍历,向左,自己压栈 { s.push(p); p = p->left; } else//无左或左已经遍历,应向右 { result.push_back(p->val); if (p->right)//有右,向右,flag可能为1,更新为0 { p = p->right; flag = 0; } else if (!s.empty())//无右,s非空,pop { p = s.top(); s.pop(); flag = 1;//pop出来的,左孩子一定已遍历,下面往右 } else return result;//s空,返回 } } return result;//不可少,若root==NULL,用这一句返回 } void main() { TreeNode* t1 = new TreeNode(1); TreeNode* t2 = new TreeNode(2); TreeNode* t3 = new TreeNode(3); TreeNode* t4 = new TreeNode(4); TreeNode* t5 = new TreeNode(5); TreeNode* t6 = new TreeNode(6); TreeNode* t7 = new TreeNode(7); TreeNode* t8 = new TreeNode(8); TreeNode* t9 = new TreeNode(9); TreeNode* t0 = new TreeNode(0); TreeNode* t10 = NULL; t1->right = t2; t2->left = t3; t4->left = t5; t4->right = t6; t7->right = t8; t8->right = t9; t1->left = t7; t7->left = t4; vector<int>result = inorderTraversal(t1); for (int i = 0; i < (int)result.size(); i++) cout << result[i] << " "; cout << endl; system("pause"); }
94.Binary Tree Inorder Traversal(非递归中序遍历)
标签:
原文地址:http://blog.csdn.net/hgqqtql/article/details/43308251