剑指offer-70-36 二叉搜索树转双向链表

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

想明白过程就很简单,记录上一次访问的点。

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    
    void dfs(TreeNode* root, TreeNode* &last, TreeNode* &head) {
        if (!root) return;
        if (root->left) {
            dfs(root->left, last, head);
        }
        
        if (head == NULL) {
            head = root;
        } else {
            last->right = root;
            root->left = last;
        }
        last = root;
        
        if (root->right) {
            dfs(root->right, last, head);
        }
        
    }
    
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if (pRootOfTree == NULL) return NULL;
        TreeNode* last = NULL, *head = NULL;
        dfs(pRootOfTree, last, head);
        return head;
    }
};


猜你喜欢

转载自blog.csdn.net/u011026968/article/details/80767724