题解 | #判断一棵二叉树是否为搜索二叉树和完全二叉树#

判断一棵二叉树是否为搜索二叉树和完全二叉树

https://www.nowcoder.com/practice/f31fc6d3caf24e7f8b4deb5cd9b5fa97

package main
import . "nc_tools"
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 
 * @param root TreeNode类 the root
 * @return bool布尔型一维数组
*/
func judgeIt(root *TreeNode) []bool {
	search, _, _ := isSearch(root)
	full := isFull(root)
	return []bool{search, full}
	// write code here
}

func isSearch(root *TreeNode) (bool, int, int) {
	if root == nil {
		return true, 0, 0
	}
	mi := root.Val
	ma := root.Val
	if root.Left != nil {
		flag, lmi, lma := isSearch(root.Left)
		if !flag || lma > root.Val {
			return false, 0, 0
		}
		mi = lmi
	}
	if root.Right != nil {
		flag, rmi, rma := isSearch(root.Right)
		if !flag || rmi < root.Val {
			return false, 0, 0
		}
		ma = rma
	}
	return true, mi, ma
}

func isFull(root *TreeNode) bool {
	if root == nil {
		return true
	}
	arr := make([]*TreeNode, 0)
	arr = append(arr, root)
	empty := false
	for len(arr) > 0 {
		tmp := make([]*TreeNode, 0)
		for _, node := range arr {
			if node.Left == nil && node.Right == nil {
				empty = true
			} else {
				if empty {
					return false
				}
				if node.Left == nil && node.Right != nil {
					return false
				} else if node.Left != nil && node.Right == nil {
					empty = true
					tmp = append(tmp, node.Left)
				} else {
					tmp = append(tmp, node.Left)
					tmp = append(tmp, node.Right)
				}
			}
		}
		arr = tmp
	}
	return true
}

全部评论

相关推荐

孤寡孤寡的牛牛很热情:为什么我2本9硕投了很多,都是简历或者挂,难道那个恶心人的测评真的得认真做吗
点赞 评论 收藏
分享
AaronRuan:看到了好多开奖了,不知道为啥自己也有点激动,真的替你们感到高兴啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务