二叉树中序递归、非递归遍历

来源:互联网 发布:java整型数组转字符串 编辑:程序博客网 时间:2024/06/08 16:02

二叉树如下:


二叉树前序序列化表示如下:

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;}



0 0
原创粉丝点击