判断一棵树是不是平衡二叉树。平衡二叉树:每一个节点的左子树和右子树的高度差的绝对值不超过1。
思路解析:求二叉树的高度,只能从下到上去查找,所以需要后序遍历。和求深度不同。
//方法一:递归 int height(TreeNode* root){ if(root == NULL) return 0; int leftHeight = height(root->left); if(-1 == leftHeight) return -1; int rightHeight = height(root->right); if(-1 == rightHeight) return -1; if(abs(leftHeight-rightHeight) > 1) return -1; //如果高度返回-1,表明这棵树不是平衡二叉树 return 1+max(leftHeight,rightHeight); }
方法二:迭代,采用后序遍历的统一迭代法,用迭代方法实现回溯算法效率很低,在此不做过多说明。