輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的迴圈雙向鍊錶。要求不能建立任何新的節點,只能調整樹中節點指標的指向。解題思路:通過棧來中序遍歷這個二叉搜尋樹。leetcode
class
solution
root = stack.
pop();
if(pre == null)
else
pre = root;
root = root.right;
}
pre.right = head;
head.left = pre;
return pre;
}}
其實二者的連線思路相同。
class
solution
void
dfs(node cur)
}
給定乙個二叉樹,原地將它展開為乙個單鏈表。例如,給定二叉樹leetcode
1
/ \2 5
/ \ \
3 4 6
將其展開為:1 \
2 \3\
4\5\
6
利用迭代的後續遍歷。
class
solution
}
利用輔助棧後序遍歷二叉樹,然後依次儲存前一節點,然後將當前節點的左右子樹指向正確位置即可。
class
solution
root = stack.
peek()
;if(root.left != null && root.left != last)
else}}
}
演算法 二叉樹轉鍊錶轉換問題
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的迴圈雙向鍊錶。要求不能建立任何新的節點,只能調整樹中節點指標的指向。leetcode 解題思路 通過棧來中序遍歷這個二叉搜尋樹。class solution root stack.pop if pre null else pre root root ...
二叉樹轉雙向鍊錶
include using namespace std 樹節點 struct node typedef struct node link 構造樹 void insert tree link h,int t if h val t insert tree h left,t else insert tre...
二叉樹轉雙向鍊錶
1.a 遞迴轉化左子樹為雙向鍊錶 1.b 找出根結點的前驅節點 是左子樹的最右的節點 1.c 將上一步找出的節點和根結點連線起來 2,如果右子樹不為null,處理右子樹 和上面的很類似 1.a 遞迴轉化右子樹為雙向鍊錶 1.b 找出根結點的後繼節點 是右子樹的最左的節點 1.c 將上一步找出的節點和...