二叉树递归的新思路——递归参数上做文章,不仅仅是root,可以增加参数携带更多信息
来源:互联网 发布:二叉树的遍历 java 编辑:程序博客网 时间:2024/05/01 18:00
之前总结的二叉树算法不外乎两种1)基于遍历的,2)基于一般递归的(当前树上的解和左右子树上解的关系)。第一种一般没有返回值,第二种一般是有返回值的。
这两种算法框架的参数列表里都只有一棵树,算法只能访问当前节点的左右子树,只能判断同一父节点的节点之间的关系。但有些问题不只同一父节点的节点(左右子树)之间的问题,可能是不同父节点的节点之间的问题,以上的算法就无能为力了。这时候要打破框框,在算法里引入多个树根,这样就可以处理不同父节点的节点之间的问题。
具体的,
1)二叉树同层次结点加链接问题:
void connect(Node *root, Node *sibling){if(!root) return;root->next= sibling;connect(root->left,root->right);if(sibling) connect(root->right, sibling->left);elseconnect(root->right, NULL);}
2)判断是否是二叉排序树问题:
条件:a, 当前结点值大于它的左子树中所有节点值,b. 当前节点大于等于它的右子树所有节点值。直观的算法,参数上只有root就可以,没有其他信息,需要在算法体内部判断当前节点和它左子树节点的及右子树节点的关系,左子树节点和右子树节点都不是一个单个节点,而是一个集合,算法势必有循环进行多次比较。这样的递归算法就比较复杂。
换一个思路,不是直接按照定义用当前节点往下跟左右子树比,而是跟上边比——父节点的取值,确定了当前节点的取值范围,只要当前节点在这个范围内,就说明当前节点是满足条件的,再递归判断左右孩子节点。
bool isBST(Node* root, int leftBound, int rightBond){if(!root) return true;if(root->data>=leftBound && root->data<rightBond){return isBST(root->left, leftBound, root->data) && isBST(root->right, root->data,rightBond);}return false;}
3)判断一棵树是否是对称的
分析:仅在第一层是同一个节点的左右子树的判断问题,其他层都是不同父节点的的节点之间的判断问题,参数只有一个root是不行的。
bool isSymetric(Node* a, Node*b){if(!a&&!b) return true;else if(!a||!b) return false; if(a->data!=b->data) return false;return(isSymetric(a->left,b->right) && isSymetric(a->right,b->left));}bool isSymetirc(Node *root){if(!root) return true;return isSymetric(root->left, root->right);}
0 0
- 二叉树递归的新思路——递归参数上做文章,不仅仅是root,可以增加参数携带更多信息
- 二叉树的遍历——递归和非递归
- 5.4.7—二叉树的递归—Sum Root to Leaf Numbers
- 从二叉排序树种看递归参数的传递
- <仅是自己做笔记。。。系列-1>二叉树的非递归遍历
- 网页的排版——不仅仅是艺术
- AOI系统的性能——不仅仅是各部分之和
- 铊的受害者——不仅仅是朱令
- 二叉树遍历:递归方法与非递归方法——递归程序修改为非递归的方法
- Python入门(四)——函数概述,参数,可变参数,关键字参数,组合参数,递归函数
- 二叉树的递归,非递归遍历
- 二叉树的递归+非递归遍历
- 二叉树的递归与非递归
- 二叉树的递归非递归遍历
- 二叉树的遍历--递归+非递归
- 二叉树的递归、非递归遍历
- 二叉树的递归和非递归
- 二叉树的递归与非递归
- BZOJ3037: 创世纪
- ubuntu自动挂载windows磁盘
- 数学之路-python计算实战(8)-机器视觉-图像二值化
- loadrunner使用记录(二)
- 不会JavaScript怎么办?
- 二叉树递归的新思路——递归参数上做文章,不仅仅是root,可以增加参数携带更多信息
- Windows 7/8/8.1下无线网卡MAC无法修改的解决方法
- hdu 1161 Eddy's mistakes(字符串:读入一行)
- GDB十分钟教程
- Bitcoin原始API
- 207
- POJ 2253 Frogger(并查集+二分)
- 数理统计与概率知识杂谈
- Mysql数据类型