輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
就是簡單的乙個二叉樹中序遍歷,
主要是明白什麼是二叉搜尋樹
二叉查詢樹(binary search tree),(又:二叉搜尋樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。)
# -*- coding:utf-8 -*-
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class
solution
: @staticmethod
defconvert
(prootoftree)
:# write code here
if prootoftree is
none
:return
none
elif prootoftree.left is
none
and prootoftree.right is
none
:return prootoftree
else
: p_l=solution.convert(prootoftree.left)
p_r=solution.convert(prootoftree.right)
if p_l is
none
and p_r is
notnone
: prootoftree.right=p_r
p_r.left=prootoftree
return prootoftree
l_head=p_l
while p_l.right is
notnone
: p_l=p_l.right
p_l.right=prootoftree
prootoftree.left=p_l
prootoftree.right=p_r
if p_r is
notnone
: p_r.left=prootoftree
return l_head
二叉搜尋樹轉雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。二叉搜尋樹的中序遍歷是從小到大排列的,那麼只要設定乙個 pre節點 來儲存開頭,按照中序遍歷的方式把樹組裝成雙向鍊錶就可以了。但是這樣做完以後,pre節點 就到達了雙向鍊錶的末尾位置,需...
二叉搜尋樹c 資料結構二叉搜尋樹
在n個動態的整數中搜尋某個整數?檢視其是否存在 假設使用動態陣列存放元素,從第 0 個位置開始遍歷搜尋,平均時間複雜度 o n 如果維護乙個有序的動態陣列,使用二分搜尋,最壞時間複雜度 o logn 但是新增 刪除的平均時間複雜度是 o n 針對這個需求,有沒有更好的方案?今天我們主要講的就是二叉搜...
演算法 二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。二叉樹類public class treenode 分析 二叉搜尋樹的定義 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它...