面試題27 二叉排序樹轉雙向鍊錶

2021-06-20 04:18:03 字數 1679 閱讀 3678

說明:

1.二叉排序樹又名二叉搜尋樹;

2.二叉樹轉成的雙向鍊錶是排好序的;

3.總共有三種方法實現,但都是基於中序遍歷。

(一)返回雙向鍊錶的頭結點

// return the head of doublelink

binarytreenode converttodoublelink1(binarytreenode currentroot)

// currentroot not equal to null

binarytreenode lefthead = null;

if(currentroot.left != null)

if(lefthead != null)

lefttail.right = currentroot;

currentroot.left = lefttail;

} binarytreenode righthead = null;

if(currentroot.right != null)

if(righthead != null)

return lefthead != null? lefthead : currentroot;

}

(二)返回雙向鍊錶的尾結點

//return the tail of doublelink

binarytreenode converttodoublelink2(binarytreenode currentroot)

binarytreenode lefttail = null;

if(currentroot.left != null)

if(lefttail != null)

binarytreenode righttail = null;

if(currentroot.right != null)

if(righttail != null)

righthead.left = currentroot;

currentroot.right = righthead;

} return righttail != null? righttail : currentroot;

}

(三)返回雙向鍊錶的頭結點或者尾結點

// return the head or tail by asleft

// if left tree return tail otherwise return head

binarytreenode converttodoublelink(binarytreenode t, boolean asleft)

// t not equal to null

binarytreenode pleft = null;

binarytreenode pright = null;

if(t.left != null)

if(pleft != null)

if(t.right != null)

if(pright != null)

binarytreenode returnnode = t;

if(asleft)

}else

} return returnnode;

}

面試題27 二叉搜尋樹與雙向鍊錶

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解 見 注釋 struct treenode class solution void convert treenode proot,treenode plastnodeinli...

面試題27二叉搜尋樹與雙向鍊錶

比如輸入圖4.12 中左邊的二叉搜尋樹,則輸出轉換之後的排序現向鍊錶。在二叉樹中,每個結點都有兩個指向子結點的指標。在雙向鍊錶中,每個結點也有兩個指標,它們分別指向前乙個結點和後乙個結點。由於這兩種結點的結構相似,同時二叉搜尋樹也是一種排序的資料結構,因此在理論上有可能實現二叉搜尋樹和排序的雙向鍊錶...

面試題27 二叉搜尋樹與雙向鍊錶

題目 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。比如輸入下圖中左邊兒茶搜尋樹,則輸出轉換後的排序雙向鍊錶。10 614 4 812164 6 8 10 12 14 16 將二叉搜尋樹轉化為有序雙向鍊錶,類似於中序遍歷,中序遍歷的...