搜索二叉树转双向链表
思路
二叉树中序遍历
非递归版本的中序遍历用栈来实现。
一个元素出现在栈顶一次,这一次会被处理并出栈。trick:用一个指针去记录当前节点cur
,如果cur->left
左侧还未遍历,就会将cur
入栈并访问cur->left
。
一行很重要的代码是cur = cur->right
,这一句之后如果cur == NULL
,则说明栈顶元素的左子树访问完了,应该访问当前栈顶元素; 如果cur != NULL
,则说明当前栈顶元素的左子节点的右子树刚刚开始访问,和cur==root
时一样循环这个过程即可。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
TreeNode