說明:
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 將二叉搜尋樹轉化為有序雙向鍊錶,類似於中序遍歷,中序遍歷的...