Morris二叉树神级遍历
Morris的实现原理,利用二叉树本身闲置的左右指针实现空间O(1)的遍历,怎么理解这个闲置指针呢?就是二叉树的最末节点,即没有左右孩子的节点,这个节点的左右指针都指向NULL,那么我们就可以利用一下,让当前节点的左节点的最右节点指向当前节点,有点绕,那就上图
Leetcode144
前序遍历
class Solution{
public:
vector<int> preorderTraversal(TreeNode* root){
vector<int> res;
if(root==nullptr)
return res;
TreeNode* cur=root, *pre=nullptr;
while(cur!=nullptr){
if(cur->left==nullptr){
//当前节点左子树为空则遍历右子树
res.push_back(cur->val);
cur=cur->right;
}//当到达最左节点时,也是用此回退。
else{
pre=cur->left;//前驱节点
while(pre->right!=nullptr && pre->right!=cur){
pre=pre->right;
}//找到前驱节点