Binary Tree Inorder Traversal

来源:互联网 发布:字体管家mac版 编辑:程序博客网 时间:2024/05/01 15:50

题目:

Given a binary tree, return the inorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1    \     2    /   3

return [1,3,2].

Note: Recursive solution is trivial, could you do it iteratively?

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ


思想:

对于二叉树的遍历,可以采用递归和非递归两种方式,对于递归方式,很容易求解,对于非递归方式,我们可以借助一个stack。


代码:

/*** Definition for a binary tree node.**/typedef struct TreeNode {     int val;     TreeNode *left;     TreeNode *right;     TreeNode(int x) : val(x), left(NULL), right(NULL) {} }*BinaryTree;class Solution {public:void CreateTree(BinaryTree & T)//二叉树的建立{char data;cin >> data;if (data == '#' )T == NULL;else{T = new TreeNode(data-'0');CreateTree(T->left);CreateTree(T->right);}}void inorder(TreeNode*root, vector<int>&ret){if (root != NULL){inorder(root->left,ret);ret.push_back(root->val);inorder(root->right,ret);}}vector<int> inorderTraversal(TreeNode* root) {//递归vector<int> ret;inorder(root, ret);return ret;}vector<int> inorderTraversal2(TreeNode *root)//非递归{stack<TreeNode *> s;TreeNode *p = root;vector<int> ret;while (p!=NULL || !s.empty()){while (p != NULL){s.push(p);p = p->left;}if (!s.empty()){p = s.top();s.pop();ret.push_back(p->val);p = p->right;}}return ret;}};


0 0
原创粉丝点击