判断二叉树是不是平衡二叉树;将二叉树转换为字符串形式;二叉树的公共祖先;

判断树是不是平衡二叉树;

class Solution {
public:
    int Length_Tree(TreeNode* tree)   //判断左右树的深度
    {
        if(tree == nullptr)
            return 0;
        int left = Length_Tree(tree->left);        
        int right = Length_Tree(tree->right);
        return (left >=right ?left:right) + 1;
    }
    bool isBalanced(TreeNode* root) {
        if(root == nullptr)   //空树判断
            return true;
        bool left = isBalanced(root->left);    //深入左子树
        if(left == false)  //如果左子树已经不是二叉树,那这个时候就不需要判断直接返回false
            return false;
        bool right = isBalanced(root->right);  //如果右子树不是,那么右子树也就是可以直接跳出了
        if(right == false)
            return false;
        int left_length = Length_Tree(root->left);//判断左子树的深度
        int right_length = Length_Tree(root->right);  //判断右子树的深度
        int diff = left_length - right_length;  //求差值
        if(diff <= 1 && diff >= -1)  //符合要求就可以返回真,否则返回假
            return true;
        else
            return false;
    }
};

将二叉树转换为字符串形式,当左子树为空时右子树不为空的时候,不能省略左子树的()但是可以省略右子树的括号,左右子树都为空的时候可以都省略,左子树不为空,右子树为空时可以省略右子树的();
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void preAccess(TreeNode* t, string & str)
    {
        if(t == NULL) return;
        str += to_string(t->val);   //to_string()将数字转换为字符串
        if(t->left || t->right)//代码中的体现就是,左子树不为空,或者右子树不为空的时候左子树+()
        {
            str += "(";
            preAccess(t->left, str);
            str += ")";
        }
        if(t->right)  //只有右子树本身 不为空的时候才+()括号中有数据
        {
            str += "(";
            preAccess(t->right, str);
            str += ")";
        }
    }    
    string tree2str(TreeNode* t) {
        string res = "";
        preAccess(t, res);
        return res;
    }
};

二叉树的公共祖先

TreeNode* lowestCommonAncestor(TreeNode* root,TreeNode* p ,TreeNode* q)
{
 	if (root == p || root == q || !root)return root;
 	struct TreeNode* left = lowestCommonAncestor(root->left, p, q);
 	struct TreeNode* right = lowestCommonAncestor(root->right, p, q);
 	if (!left&&!right)return nullptr;
 	else if (left&&!right)return left;
 	else if (right&&!left)return right;
 	return root;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值