中序遍历遵循“左根右”的原则。
(一)递归
void InOrder(BiNode *bt)
{
if(bt == NULL) return;
else
{
InOrder(bt->lchild);
cout << bt->data << " ";
InOrder(bt->rchild);
}
}
(二)非递归
将二叉树的最左边的子树都压栈,循环到没有左子树的情况,直接将栈顶的值存到动态数组中,弹出栈顶,再转到右子树中,循环到栈中的元素为空。
class Solution {
public:
/*
* @param root: A Tree
* @return: Inorder in ArrayList which contains node values.
*/
vector<int> inorderTraversal(TreeNode * root) {
// write your code here
vector<int> t;
TreeNode *tree[100];
int top = -1;
TreeNode* p;
if(root != NULL)
{
p = root;
while(top > -1 || p != NULL)
{
while(p != NULL)
{
tree[++top] = p;
p = p->left;
}
if(top > -1)
{
p = tree[top];
t.push_back(p->val);
top--;
p = p->right;
}
}
}
return t;
}
};
2018/2/7