leetcode:编程技巧

判断时的技巧

  • 判断两个小数a和b是否相等,由于计算机表示小数都有误差,所以不要用a==b,应该判断两者之差的绝对值fabs(a-b)<1e-9,即是否小于一个阈值。
  • 判断一个整数是否是为奇数,不要用 x % 2 == 1,应该用 x % 2 != 0,因为 x 可能是负数。

STL使用技巧

  • 优先使用 vector 和 string 而非动态分配的数组,声明多维数组的方法:
vector<vector<int> > ary(row_num, vector<int>(col_num, 0));

随机问题

有时候会遇到要求“随机选择”、“求xx的概率”之类的题目,对此正确的做法是“累加求平均”,这样就能得到xx的平均概率,然后题目就能变得很简单了。

二叉树中指针和引用的区别

创建二叉树

有两类模式:
a: 在main 函数中定义一个TreeNode *,注意这是个二叉树节点的指针类型。然后将这个参数传递给一个CreatBiTree函数;在该函数中递归创建二叉树;代码如下:

void CreatBiTree( TreeNode ** T) //注意我这里用的是二级指针
{
    char ch;
    ch=getchar();
    if( ch == '*') //如果输入星号则二叉树的节点为空节点
        *T=NULL;
    else{
         (*T) = new TreeNode(ch);
         CreatBiTree(&((*T)->lchild)); //分配成功则接着建立左子树和右子树
         CreatBiTree(&((*T)->rchild)); 
    }
}

这里用到了树节点的二级指针,其实也可以用树节点的指针的引用,如下:

void CreatBiTree( TreeNode *& T) //注意我这里用的是指针的引用
{
    char ch;
    ch=getchar();
    if( ch == '*') //如果输入星号则二叉树的节点为空节点
        T=NULL;
    else{
        T = new TreeNode(ch);
        CreatBiTree(T->lchild);  
        CreatBiTree(T->rchild);  
    }  
}

注意,之所以不能使用树节点指针作为形参,是因为在建树的过程中,我们不是改变了树节点,而是: 改变了树节点指针的指向。
如果使用树节点指针作为形参,那么我们实际上是对该指针的拷贝进行操作(该拷贝和原指针指向同一个树节点),而原来的指针没有发生变化。这样一来,不仅会造成拷贝后的指针变成野指针,而且也达不到建树的效果。


b:可以直接在CreatBiTree函数中创建二叉树,并返回二叉树的根指针;
如:

TreeNode * root = CreatBiTree();

代码如下:

BiTree CreatBiTree()
{
    char ch; 
    TreeNode * pt=NULL;
    ch=getchar();
    if( '*'==ch) 
        return NULL;

    pt=new TreeNode(ch);
    pt->lchild=CreatBiTree();
    pt->rchild=CreatBiTree();
    return pt;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值