struct treenode
;
一、前序輸出二叉樹
void preorder(treenode *root)
p = stk.top();
stk.pop();
p = p->right;
}}
二、中序輸出二叉樹
void midorder(treenode *root)
p = stk.top();
cout}}
四、從上到下,從左至右輸出二叉樹void postorder(treenode* root)
while(!stk.empty())
}}}
void printhorizonal(treenode *root)
}
五、之字形列印二叉樹
vector> print(treenode* root)
if(eve)
reverse(tmp.begin(),tmp.end());
fin.push_back(tmp);
eve = !eve;
} return fin;
}
六、輸出二叉樹第k個小的點的值
int kthsmallestnode(treenode *root,int k)
p = stk.top();
if(--k==0)
return p->val;
stk.pop();
p = p->right;
} return -1;
}
二叉樹的三種非遞迴遍歷
一.前序遍歷 前序遍歷按照 根結點 左孩子 右孩子 的順序進行訪問。1.遞迴實現 void preorder1 bintree root 遞迴前序遍歷 2.非遞迴實現 根據前序遍歷訪問的順序,優先訪問根結點,然後再分別訪問左孩子和右孩子。即對於任一結點,其可看做是根結點,因此可以直接訪問,訪問完之後...
二叉樹的三種非遞迴遍歷
遞迴演算法和非遞迴演算法的轉換 可以借助棧,將二叉樹的遞迴演算法轉換為非遞迴演算法,下面以中序遍歷為例給出中序遍歷的非遞迴演算法。先掃瞄 並非訪問 根結點的所有左結點並將他們一一進棧。然後出戰乙個結點 p 顯然結點 p沒有左孩子結點或者左孩子結點均已訪問過 則訪問它。然後掃瞄該結點的有孩子結點,將其...
二叉樹的三種非遞迴遍歷
中序遍歷 後序遍歷 非遞迴必會用到棧吶!void preorder btnode b 如果左節點不存在 if top 1 訪問p節點,並將p節點入棧 2 如果左節點存在,則讓p指向左節點,迴圈1步驟 3 左節點不在了,則出棧一次,讓棧頂元素等於目前節點的親節點,藉此讓p指標指向這個左節點的兄弟。4 ...