題目:輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
思路:主要利用非遞迴的中序遍歷的方式,將二叉搜尋樹進行中序遍歷
那麼,此時,二叉搜尋樹就成為乙個排序後的節點了,再將它們鏈結起來即可。
/*
題目:非遞迴的中序遍歷
思路:利用棧的資料結構,將左邊的節點依次存入棧中,利用棧的先進後出方法,將該最左邊的節點輸出後,
再判斷該節點是否有右子數,有的話,繼續上面操作,依次輸出即可。
**如下:
*/while (pnode != null || !treestack.empty())
if (!treestack.empty())
}
/*
題目:二叉搜尋樹與雙向鍊錶
*/class solution
stack
treestack;
treenode* pnode = prootoftree;
bool isfirst = true;
treenode* head;
treenode* ppre = null;
//非遞迴的中序遍歷
while (pnode != null || !treestack.empty())
if (!treestack.empty())
else
pnode = pnode->right;}}
return head;
}};
劍指offer面試題25
面試題25 二叉樹中和為某乙個值的路徑 二叉樹結點定義 struct binarytreenode 預備知識 vector中的push back是新增乙個元素 vector中的pop back是刪除乙個元素 二叉樹的操作 include stdafx.h include binarytree.h 建...
劍指Offer面試題 25 二叉搜尋樹與雙向鍊錶
題目 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。比如輸入下圖中左邊的二叉搜尋樹,則輸出轉換之後的排序雙向鍊錶。二叉搜尋樹的節點定義如下,這裡使用c 語言描述 public class binarytreenode public ...
《劍指Offer》面試題 平衡二叉樹
題目 輸入乙個二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。思路 用後序遍歷實現 先遍歷節點的左右子樹,左右子樹都平衡才來判斷該節點是否平衡,如果左右子樹中有不平衡的,則直接返回false,避免了從上往下逐個節點地計算深度帶來...