leetcode刷题,总结,记录,备注 94

来源:互联网 发布:mac安装win8系统网卡 编辑:程序博客网 时间:2024/06/05 05:39

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?

leetcode刷题94,二叉树中序遍历问题,三种遍历使用递归的话都很方便,使用迭代的方式稍微麻烦点。

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<int> inorderTraversal(TreeNode* root) {        vector<int> TreeNodeVal;        stack<TreeNode *> sTreeNode;        TreeNode * temp;        if (root == NULL)        return TreeNodeVal;        temp = root;                while (temp || !sTreeNode.empty())        {            while (temp)            {                sTreeNode.push(temp);                temp = temp->left;            }                        if (!sTreeNode.empty())            {                temp = sTreeNode.top();                sTreeNode.pop();                TreeNodeVal.push_back(temp->val);                temp = temp->right;            }        }                return TreeNodeVal;    }};
一律先将左子树一溜入栈,在弹栈的时候,将当前节点值加入容器中,并对自己的右节点进行操作,从而达到中序的目的,,具体让我仔细讲我也讲不清楚,关键还是自己画个树实地做几步操作可以自己更好的理解。我也是看了别人的解法,才理解这个题目的。

0 0