Binary Tree Inorder Traversal (leetcode)

来源:互联网 发布:时时彩毒胆计划软件 编辑:程序博客网 时间:2024/06/05 16:27

题目:

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.


OJ's Binary Tree Serialization:

The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

Here's an example:

   1  / \ 2   3    /   4    \     5
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".
https://oj.leetcode.com/problems/binary-tree-inorder-traversal/点击打开链接

二叉树的中序遍历,其中inorder函数是递归版本的遍历,而inorderIterat是迭代版的中序遍历。

#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) {}};void inorder(TreeNode *root,vector<int> &result){if(root==NULL)return ;inorder(root->left,result);result.push_back(root->val);inorder(root->right,result);}void inorderIterat(TreeNode *root,vector<int> &result){stack<TreeNode*> s;s.push(root);TreeNode* temp=s.top();while(temp->left!=NULL){temp=temp->left;s.push(temp);}while(!s.empty()){temp=s.top();result.push_back(temp->val);s.pop();if(temp->right!=NULL){s.push(temp->right);temp=s.top();while(temp->left!=NULL){temp=temp->left;s.push(temp);}}}}vector<int> inorderTraversal(TreeNode *root){vector<int> result;if(root==NULL)return result;//inorder(root,result);//递归版本inorderIterat(root,result);//迭代版本return result;}int main(){TreeNode *root=new TreeNode(1);root->left=new TreeNode(2);root->right=new TreeNode(3);vector<int> result=inorderTraversal(root);for(int i=0;i<result.size();i++)cout<<result[i]<<" ";cout<<endl;system("pause");return 0;}

0 0
原创粉丝点击