Swift.从上往下打印二叉树

cubegao 2015-07-13 PM 691℃ 0条
题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
import Foundation

class For23Solution {
    func printTreeNode(_ root: TreeNode?) {
        
        var queue: [TreeNode?] = [TreeNode]()
        
        queue.append(root)
        while !queue.isEmpty {
            
            let newRoot = queue.removeFirst()
            print(newRoot?.val ?? 0)
            
            if newRoot?.left != nil {
                queue.append(newRoot?.left)
            }
            
            if newRoot?.right != nil {
                queue.append(newRoot?.right)
            }
        }
        
    }
}

算法思想:题目实际上就是二叉树的层序遍历,如上图,我们借助队列来存储节点来实现层序遍历的效果,具体操作:

  1. 先将根节点入队列
  2. 将根节点出队列,打印;然后将其左右子树依次入队列(若其存在)
  3. 重复步骤2,直到将树遍历完为止。
    上面步骤最核心的就是步骤2,步骤2为什么能够实现层序的效果呢?当该节点出栈的时候,才会将下一层的节点(其左右子树)入栈,这样就保证了一层一层的打印效果;由于左子树一直在右子树前面进行操作,所以,不会乱序,可以实现从左往右的效果。

github地址:https://github.com/cubegao/LeetCode

标签: 算法

非特殊说明,本博所有文章均为博主原创。

评论啦~