您的位置:首页 > 其它

!!!树的中序,前序线索化遍历

2016-06-26 21:16 239 查看
=====

笔记另写:

======

code:

class A{
public:
///inorderMorrisTraversal
void inorderMorrisTraversal(TreeNode *root){
TreeNode *curr = root;
TreeNode *prev = nullptr;
while(curr!=nullptr){
if(curr->left == nullptr){
cout<<curr->val<<" ";
curr = curr->right;
}else{
///search predecessor
prev = curr->left;
while(prev->right !=nullptr && prev->right!=curr){
prev = prev->right;
}
if(prev->right==nullptr){
prev->right = curr;
curr = curr->left;
}else{
prev->right = nullptr;///recover the tree
cout<<curr->val<<" ";
curr = curr->right;
}
}///if-else
}///while
}
};


=== 前序线索化

///
void preMorris(TreeNode* root){
TreeNode *curr = root;
TreeNode *prev = nullptr;
while(curr!=nullptr){
if(curr->left==nullptr){
cout<<curr->val<<" ";
curr = curr->right;
}else{
prev = curr->left;
while(prev->right!=nullptr && prev->right!=curr){
prev = prev->right;
}
if(prev->right==nullptr){
prev->right = curr;
cout<<curr->val<<" ";
curr = curr->left;
}else{
prev->right = curr;
curr = curr->right;
}
}
}///while
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: