剑指Offer系列-面试题27:二叉搜索树与双向链表

    xiaoxiao2021-03-25  68

    题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

    思路:由二叉搜索树的原理,中序遍历即为有序的链表,因此直接中序遍历,一边遍历,一边调整指针。

    代码:

    /// 非递归,中序遍历 TreeNode* Convert(TreeNode* root) { if(root == NULL) { return NULL; } stack<TreeNode*> s; TreeNode* p = root; TreeNode* pre = NULL; bool first = true; while(p != NULL || !s.empty()) { while(p != NULL) { s.push(p); p = p->left; } p = s.top(); s.pop(); if(first) /// 只用一次 { root = p; pre = root; first = false; } else { pre->right = p; p->left = pre; pre = p; } p = p->right; } return root; }

    转载请注明原文地址: https://ju.6miu.com/read-37033.html

    最新回复(0)