[LeetCode C 实现]144. Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes' values.

Input: [1,null,2,3]

1

\

2

/

3

Output: [1,2,3]

Follow up: Recursive solution is trivial, could you do it iteratively?

递归实现/**

* Definition for a binary tree node.

* struct TreeNode {

* int val;

* struct Tree......

[LeetCode C实现]94. Binary Tree Inorder Traversal

Given a binary tree, return the inorder traversal of its nodes' values.

Example:

Input: [1,null,2,3]

1

\

2

/

3

Output: [1,3,2]

Output:

Follow up: Recursive solution is trivial, could you do it iteratively?

通过这道leetcode中的题目我们将学习,二叉树(中序 后序 前序)遍历递归与非递归实现,算法采用C编写,在非递归算法中如果采用C++中的栈来实现,将会非常......

僵尸进程与孤儿进程

最近忙里偷闲整理linux c系统编程中的相关知识点,今天来介绍的是僵尸进程与孤儿进程,并结合具体的代码示例,如果你有任何疑问欢迎留言讨论。如果你对这部分概念比较清楚,可以直接跳转到相关代码部分进行验证。

基本概念

孤儿进程:父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

产生的......

结构体比较

如果有人问你能否比较两个结构体变量,你该如何回答?

在回答这个问题之前,需要了解以下知识:

什么是字节对齐?

在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然边界(alignment)分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。

为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的”对齐”. 比如4字节的int型,其起始地址应该位于4字节的边界......

尾递归

若函数在尾位置调用自身(或是一个尾调用本身的其他函数等等),则称这种情况为尾递归。尾递归也是递归的一种特殊情形。尾递归是一种特殊的尾调用,即在尾部直接调用自身的递归函数。对尾递归的优化也是关注尾调用的主要原因。尾调用不一定是递归调用,但是尾递归特别有用,也比较容易实现。

尾递归在普通尾调用的基础上,多出了2个特征:

1.在尾部调用的是函数自身 (Self-called);

2.可通过优化,使得计算仅占用常量栈空间 (Stack Space)。

优化尾递归的分析与示例def recsum(x):

if x == 1:

return x

else:

return x + recsum(x......

gcc编译阶段

电话面试被问到一个很基础很底层的问题,可是一时间不知道如何回答,总结网上的相关内容并加以验证,如果针对文章内容有任何疑问,欢迎留言讨论。

gcc编译流程分为4个步骤,分别为:

预处理(Pre-Processing)

编译(compiling)

汇编(Assembling)

链接(Linking)

示例代码main.c

#include ......

gdb调试进程线程

本文是学习100gdb-tips的总结内容,部分代码与原文不同,补充相关调试程序中遇到的问题与解决方法。

调试已运行的程序

thread.c

#include <stdio.h>

#include <unistd.h>

#include <pthread.h>

void *thread_func(void *p_arg)

{

while (1)

{

printf("%s\n", (char*)p_arg);

sleep(10);

}

}

int main(void)

{

pthread_t t1, t2;

pthread_c......

C语言宏assert

assert宏

/* assert example */

#include <stdio.h> /* printf */

#include <assert.h> /* assert */

void print_number(int* myInt) {

assert (myInt!=NULL);

printf ("%d\n",*myInt);

}

int main ()

{

int a=10;

int * b = NULL;

int * c = NULL;

b=&a;

print_number (b);

print_number (......

C语言特性C99介绍

本文将持续介绍C99中新增特性,由于工作环境在C89,因此学习C99中新增特性,本文将持续更新.

C99中的布尔值

C99提供了_Bool型,所以在这一版本中,布尔变量可以声明为_Bool flag;

除了_Bool类型的定义,C99还提供了一个新的头该头文件提供了bool宏,用来代表_Bool,同时还提供了true 和 false分别代码1和0.

示例程序:

#include <stdio.h>

int main()

{

_Bool flag = 0;

printf("%d\n",flag);

return 0;

}

输出0

#inc......

二叉搜索树

二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树:

若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;

若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;

任意节点的左、右子树也分别为二叉查找树;

没有键值相等的节点。