typedef struct Node{
int data;
char ch;
struct Node *lchild, *rchild;
}Tree;
1.层次遍历链接链表
Tree* changeLeavesDirction(Tree* tree)
{
Tree* head = (Tree*)malloc(sizeof(Tree));
head->lchild = head->rchild = NULL;
Tree* pre = head;
queue<Tree*> qu;
qu.push(tree);
while(!qu.empty()){
int len = qu.size();
for(int i=0;i<len;i++){
Tree* t = qu.front();
bool flag = true;
if(t->lchild){
qu.push(t->lchild);
flag = false;
}
if(t->rchild){
qu.push(t->rchild);
flag = false;
}
if(flag){
pre->rchild = t;
pre = t;
}
qu.pop();
}
}
return head;
}
2.非递归后序遍历来链接链表
Tree* changeLeavesDirction2(Tree* tree){
Tree* head = (Tree*)malloc(sizeof(Tree));
head->lchild = head->rchild = NULL;
Tree* pre = head;
Tree* p = tree;
Tree* r = NULL;
stack<Tree*> st;
while(p || !st.empty()){
if(p){
st.push(p);
p = p->lchild;
}else {
p = st.top();
if(p->rchild==NULL && p->lchild==NULL){
pre->rchild = p;
pre = p;
}
if(p->rchild && p->rchild!=r){
p = p->rchild;
}else {
st.pop();
r = p;
p = NULL;
}
}
}
return head;
}