leetcode-958

187 阅读1分钟

题目描述:具体描述见原题。简单来说就是检验给定二叉树是否为完全二叉树。

集解题思路:根据完全二叉树性质可得(完全二叉树简介),若将完全二叉树存储在数组中,除最后一个节点为null外,中间不会出现null节点,根据此性质层次序遍历即可。具体过程见代码。

具体代码:

func isCompleteTree(root *TreeNode) bool {
   queue, see := make([]*TreeNode, 0), false
   queue = append(queue, root)
   for len(queue) != 0 {
      length := len(queue)
      for i := 0; i < length; i++ {
         if queue[i] == nil { // 在遍历当前层节点中,如果发现空节点,将标志变量置为true,跳过本次循环
            see = true
            continue
         }
         if see { // 在遍历当前层节点时,如果发现null节点后仍然有非null节点,则不为完全二叉树
            return false
         }
         queue = append(queue, queue[i].Left, queue[i].Right) // 当前节点左右字节的点进队列
      }
      queue = queue[length:] // 更新为当前层下一层节点
   }
   return true
}

补充说明:中秋放假,可能咕咕咕两天,回家打游戏。