题目1:
假设二叉树采用二叉链存储结构存储,要求返回二叉树b的后序序列中的第一个结点的指针
注:不使用递归和栈
分析:二叉树后序遍历序列的第一个结点是左子树中最左下的结点,如果左下的结点无左子树但有右子树,那么就是右子树中最左下的结点
代码:
//求后序遍历的第一个结点的指针
BTNode* postfirst(BTNode* b) {
BTNode* p = b;
if (b != NULL) {
while (p->lchild != NULL || p->rchild != NULL) {
//先找到结点p的最左下结点
while (p->lchild != NULL) {
p = p->lchild;
}
//如果结点p有右孩子,转向该右孩子
if (p->rchild != NULL) {
p = p->rchild;
}
}
}
return p;
}
题目2:
设计一个算法,采用后序遍历方式求一颗给定二叉树b中的所有小于x的结点个数
代码:
//采用后序遍历求一颗二叉树中所有小于x的结点个数
int LessNodes(BTNode* b, char x) {
int num1, num2, num = 0;
if (b != NULL) {
return 0;
}
else {
num1 = LessNodes(b->lchild, x);
num2 = LessNodes(b->rchild, x);
num += num1 + num2;
if (b->data < x) num++;
return num;
}
}