1 Star 0 Fork 0

KANLON/algorithm-demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
image
interviewOffer
src/com/kanlon
accumulate
add_two_numbers
array
binary_tree_top_to_bottom
blank
common_parentln_tree
continuous_cards
convert_binary_search_tree
ConvertBinarySearchTree.java
README.MD
copy_complex_list
deletenode
dices_probability
fibonacci
find_max_and_min
first_common_nodes_in_lists
first_not_repeating_char
greatest_sum_of_sub_arrays
inverse_pairs
k_least_numbers
kth_node_from_end
last_number_in_circle
listnode
matrix_clockwise
merge_sorted_lists
mirror_tree
more_than_half_number
number_of_1
number_of_k
numbers_appear_once
numof1inbinary
path_in_tree
power
printnumber
queue2stack
reorderarray
reverse_list
reverse_words_in_sentence_and_left_rotate_string
rotate
singleton
sort_array_for_min_number
squence_of_bst
stack_push_pop_order
stack_with_min
string_permutation
string_to_int
sub_tree
totalsort
tree_depth
treenode
two_numbers_or_continues_squence_with_sum
ugly_number
.gitignore
leetcode
other
蓝桥杯
.gitignore
README.MD
剑指Offer 第二版.pdf
剑指Offer 纪念版.pdf
剑指offer 第一版.pdf
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

面试题27:二叉搜索树和双向链表

题目:

题目:输入一颗二叉搜索树,将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。比如输入如下图中左边的二叉搜索树,则输出转换之后的排序双向链表。
二叉树的定义如下:

class BinaryTreeNode{
	int mNValue;
	BinaryTreeNode mPLeft;
	BinaryTreeNode mPRight;
}

解题思路:

(1)利用中序遍历,因为中序遍历的顺序刚好是二叉搜索树的从小到大的遍历顺序。

(2)当遍历到根结点的时候,将根结点左子树结点,指向左子树中最大的元素,即双向链表中最后的一个元素。(这时候已经转化后左子树了)和将最后的元素的右子树指向根结点。这样此时遍历的根结点也是双向链表了,并将最后一个元素替换为该结点。

(3)然后如果右子树不是空的话,将右子树和链表的最后一个元素结点传到递归方法中转换。左右子树 都是这样递归转换。


马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/KANLON/algorithm-demo.git
git@gitee.com:KANLON/algorithm-demo.git
KANLON
algorithm-demo
algorithm-demo
master

搜索帮助