非遞迴二叉樹

2021-08-07 06:22:27 字數 1448 閱讀 9624

由於棧和遞迴原理相同,且遞迴建立二叉樹的效率較低,所以我們可以借助棧來實現二叉樹的非遞迴建立以及遍歷。

#include

#include

using

namespace

std;

template

struct binarytreenode

};template

class binarytree

binarytree(const t* arr, size_t size, const t &invalid)

void prevorder() // 前序遍歷

cout

<< endl;

}void inorder() //中序遍歷

pcur = s.top();

cout

<< pcur->_data << " ";

s.pop();

//若右孩存在,當成一顆新樹來遍歷

pcur = pcur->_right;

}cout

<< endl;

}void backorder() //後序遍歷

pcur = s.top();

if (pcur->_right == null || pcur->_right == flag)

else

}cout

<< endl;

}protected:

node* _createbinarytree(const t* arr, size_t size, size_t index, const t &invalid)

else

}else

if (flag == 2)

else

}else

//如果已經出棧的元素是當前棧頂的右孩子,表示此結點左右子樹已經建立完畢,繼續出棧

二叉樹 遞迴 非遞迴

include include include include using namespace std typedef struct node bintree typedef struct node1 btnode void creatbintree char s,bintree root 建立二叉...

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

二叉樹非遞迴遍歷

二叉樹非遞迴遍歷的幾個要點 1 不管前序 中序還是後序,它們的遍歷路線 或者說是回溯路線,先沿左邊一直走到盡頭,然後回溯到某節點,並跳轉到該節點的右孩子 如果有的話 然後又沿著這個有孩子的左邊一直走到盡頭 都是一樣的。2 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...