題目描述
二叉樹數據結構TreeNode可用來表示單向鏈表(其中left置空,right爲下一個鏈表節點)。實現一個方法,把二叉搜索樹轉換爲單向鏈表,要求值的順序保持不變,轉換操作應是原址的,也就是在原始的二叉搜索樹上直接修改。
返回轉換後的單向鏈表的頭節點。
簡單來說就是把二叉搜索樹變成鏈表,不過是原地修改,改完的樹只有右邊節點
解題思路
中序遍歷,根左右
package treenode;
public class convertBiNode {
public static void main(String[] args) {
TreeNode t1 = new TreeNode(1);
TreeNode t2 = new TreeNode(2);
TreeNode t3 = new TreeNode(3);
t2.left = t1;
t2.right = t3;
convertBiNode test = new convertBiNode();
test.convertBiNode(t2);
}
// 定義一個全局頭指針
// 不斷移動
TreeNode rootNode;
public TreeNode convertBiNode(TreeNode root) {
//頭指針實例化
rootNode = new TreeNode(0);
//備份這個頭指針
TreeNode headNode = rootNode;
// 開始中序遍歷
midOrderRe(root);
//返回二叉樹的第一個節點
return headNode.right;
}
public void midOrderRe(TreeNode r) {
//跳出遞歸的條件
if (r == null) {
return;
}
//中序遍歷,根左右
midOrderRe(r.left);
//將root放入鏈表最後
rootNode.right = r;
//將二叉樹中節點原有的left置空
r.left = null;
//指向頭指針的最後一節點
rootNode = rootNode.right;
midOrderRe(r.right);
}
}
其實簡單畫個1,2,3的二叉搜索樹推一遍就行了,遞歸不多