[leetcode] 94.Binary Tree Inorder Traversal

来源:互联网 发布:mysql数据库备份还原 编辑:程序博客网 时间:2024/05/21 17:00

题目:
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].
题意:
给定一棵二叉树,对其进行中序遍历。使用递归的方法的话比较简单,只要先递归遍历左子树再访问根节点,再递归遍历右子树。
本文使用非递归的方法。使用栈存储节点。当要访问某个节点的时候先要将其左子树的的所有节点访问完,我们将该节点以及其所有左孩子,左孩子的左孩子,一直到没有左孩子为止,加入到栈中。此时栈顶的元素没有左孩子了,那么接下来应该就访问栈顶的元素,访问完之后,将当前节点改为栈顶的元素的右孩子,并将栈顶这个已经访问的元素出栈。对右孩子依旧采用将所有的做节点压入栈,然后循环这个操作。

以上。
代码如下:

/** * 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) {        stack<TreeNode*> s;        TreeNode* p = root;        vector<int> result;        while(!s.empty() || p != NULL) {            while(p != NULL) {                s.push(p);                p = p->left;            }            if(!s.empty()) {                p = s.top();                s.pop();                result.push_back(p->val);                p = p->right;            }        }        return result;    }};
0 0
原创粉丝点击