题目分析:
- 给定一棵二叉树,求中序遍历结果,要求利用非递归实现。
解题思路:
递归实现
1)递归遍历左子树;
2)访问根节点;
3)递归遍历右子树
非递归实现
利用栈实现,具体方法如下:
1)将当前节点压栈,如果该节点存在左孩子,将左孩子压栈,然后看其是否有左孩子,存在则压栈,重复操作,不断将左孩子压入栈,直到不存在左孩子结束;
2)弹出栈顶元素,判断其是否存在右孩子,存在压栈,并判断其是否存在左孩子,做类似1)中的操作,循环压左孩子,直到不存在左孩子为止;
3)重复操作1)和2),直到当前节点为空且栈为空即可。
实现程序
//二叉树中序遍历(非递归实利用栈实现) vector<int> inorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode *> stk; if (root == NULL) return result; TreeNode *temp = root; do { // 节点压栈 if (temp != NULL) { stk.push(temp); temp = temp->left; } // 弹栈,访问并判断右子树 else { temp = stk.top(); stk.pop(); result.push_back(temp->val); temp = temp->right; } }while(!stk.empty() || temp != NULL); return result; }