二叉树如下:
二叉树前序序列化表示如下:
1 2 4 7 -1 -1 8 -1 -1 5 -1 -1 3 6 -1 -1 -1
-1代表左右子树为NULL的情况,使用前序序列构造二叉树。
二叉树结构体表示如下:
struct TreeNode{
TreeNode(int value):left(NULL),right(NULL),val(value){ }
TreeNode *left;
TreeNode *right;
int val;
};
(一)二叉树中序非递归遍历:
二叉树中序遍历,使用栈来模拟,与前序非递归遍历的唯一区别在于,打印当前结点值的位置不同
void InoderTraverseTree(TreeNode *root)
{
if(root == NULL) return;
stack<TreeNode*> s;
s.push(root);
TreeNode *curnode = NULL;
while(!s.empty()){
while(curnode = s.top()) s.push(curnode->left);
s.pop();
if(!s.empty()){
curnode = s.top();
s.pop();
std::cout << curnode->val << " "; //中序在此打印
s.push(curnode->right);
}
}
}
(二)二叉树中序递归遍历:
void InoderTraverseTree_Recur(TreeNode *root)
{
if(NULL == root) return;
InoderTraverseTree_Recur(root->left);
std::cout << root->val << " ";
InoderTraverseTree_Recur(root->right);
}
调用函数:
int main(void)
{
TreeNode *root = NULL;
//先序建立一棵树
PreoderBuildTree(root);
//中序非递归遍历
InoderTraverseTree(root);
std::cout << std::endl;
//中序递归遍历
InoderTraverseTree_Recur(root);
std::cout << std::endl;
}