后继节点、前驱节点:都是按照中序来算的。
中序遍历:一般用递归做。
二叉搜索树与双向链表:使用中序递归做模板,先找到第一个节点,然后再分别给左右节点找下一个节点。实现方式如下:
Convert(pRootOfTree -> left);
/*找到第一个节点,初始化head和pre*/
if(pre == nullptr)
{
head = pRootOfTree;
pre = pRootOfTree;
}
else {
pre->right = pRootOfTree;
pRootOfTree -> left = pre;
pre = pRootOfTree;
}
Convert(pRootOfTree -> right);
对称的二叉树:可以根据递归来做。
终止条件是:树的左右孩子都是空,则返回true;当只有一个是空,或者左右孩子的值不一样时,返回false.
返回值:每一级将子问题是否匹配往上传递。
本级任务:根左右走左时根右左走右,根左右走右时根右左走左。
return recursion(root1->left,root2->right)&&recursion(root2->left,root1->right);
或者把空节点补成1001,然后层序遍历。