二叉樹的非遞迴呼叫

2021-09-19 05:45:43 字數 599 閱讀 8499

實現過程:

首先我們知道中序遍歷就是先訪問左子樹,再根節點,最後右子樹。

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,否則返回左右子樹最大距離...