2020 năm 07 tháng 26 ngày Máy tính
1 Mô tả bài toán
Cho một cây nhị phân, hãy trả về danh sách giá nohu52 đăng nhập Sam86 Club Choi Game Bài trị các nút theo thứ tự duyệt trung tự.
Ví dụ:
Đầu vào: [1,null,2,3]
1
\
2
/
3
Đầu ra: [1,3,2]
Chú ý: Cách giải sử dụng đệ quy khá đơn giản, nhưng bạn có thể thực hiện bằng cách dùng vòng lặp không?
Nguồn bài toán: LeetCode
2 Ý tưởng giải quyết
Xem hình minh họa bên dưới, tổng quát mà nói, thuật toán này sử dụng nhiều đường thẳng từ trên trái xuống dưới phải để “cắt đứt” kết nối giữa gốc cây và cây con bên trái. Sau đó, các nút gốc sẽ lần lượt được đẩy vào một ngăn xếp (stack). Khi nút gốc ở góc dưới cùng bên trái đã được đẩy vào ngăn xếp, chúng ta bắt đầu đưa các phần tử ra khỏi ngăn xếp theo thứ tự. Thứ tự xuất hiện của các phần tử chính là thứ tự duyệt trung tự.
3 Mã nguồn Golang
func inorderTraversal(root *TreeNode) []int {
if root == nil {
return []int{}
}
vals := []int{}
nodes := []*TreeNode{root}
for len(nodes) > 0 {
node := nodes[len(nodes)-1]
if node.Left != nil {
nodes = append(nodes, node.Left)
node.Left = nil
continue
}
vals = append(vals, node.Val)
nodes = nodes[:len(nodes)-1]
if node.Right != nil {
nodes = append(nodes, node.Right)
}
}
return vals
}
#Golang #Thuật_toán