實現過程:
首先我們知道中序遍歷就是先訪問左子樹,再根節點,最後右子樹。
stl的stack容器滿足我們的先進後出的要求。
1.訪問根節點的左孩子節點,看是否為null, 如果存在左節點,該節點入棧如果沒有左子樹,那就訪問該節點。
2.如果節點有右子樹,則重複1步驟,如果沒有右子樹(節點訪問完畢),回退,讓棧頂元素彈出。訪問棧頂元素,並訪問右子樹,重複步驟1
3.如果棧為空,表示遍歷結束
注意:入棧的節點表示,本身沒有被訪問過,同時右子樹也沒被訪問過
有乙個一直往左走的入棧操作
#include#include"stack"
using namespace std;
typedef struct binode
binode,*bitree;
binode *gofarleft(binode *t,stack&s)
while(t->lchild)
return t;
}void inorder2(binode *t)
else if(!s.empty())
else
}}
二叉樹 遞迴 非遞迴
include include include include using namespace std typedef struct node bintree typedef struct node1 btnode void creatbintree char s,bintree root 建立二叉...
非遞迴二叉樹
由於棧和遞迴原理相同,且遞迴建立二叉樹的效率較低,所以我們可以借助棧來實現二叉樹的非遞迴建立以及遍歷。include include using namespace std template struct binarytreenode template class binarytree binary...
二叉樹的遞迴呼叫
二叉樹本身就是遞迴定義的,所以在二叉樹上運用遞迴非常方便。下面是我刷的常見關於二叉樹的遞迴演算法的題目 leetcode 104.maximum depth of binary tree 題意 找根結點到葉子結點的最長距離 即最大深度 演算法思路 當結點為null時,返回0,否則返回左右子樹最大距離...