二叉樹的三種遍歷 中序 前序 後序

2021-08-14 04:09:45 字數 1734 閱讀 7450

/**

* definition for a binary tree node.

* struct treenode

* };

*/

中序遍歷

中序遞迴版

class solution ;

vector

ret;

help(root, ret);

return ret;

}void help(treenode* node, vector

& ret)

};

中序非遞迴

class solution ;

vector

ret;

std::stack

sk;treenode* read = root;

while(read != null || !sk.empty())

else

}return ret;

}};

前序遍歷

前序-遞迴版

class solution ;

vector

ret;

help(root, ret);

return ret;

}void help(treenode* node, vector

& ret)

};

前序-非遞迴版

class solution ;

vector

ret;

std::stack

sk;treenode* read = root;

sk.push(read);

while (!sk.empty())

if (read != null && read->left != null)

}return ret;

}};

注:前序非遞迴的終止條件不能和中序一樣。

while (!sk.empty())
因為所有節點被彈出後,read 值不為null,這樣會導致對空的 stack 執行pop操作。c++是不允許這樣的。

後序遍歷

後序-遞迴

class solution ;

vector

ret;

help(root, ret);

return ret;

}void help(treenode* node, vector

& ret)

};

後序-非遞迴

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution ;

vector

ret;

treenode* read = root;

treenode* top;

treenode* tmp = null; // 記錄上次訪問過的節點

std::stack

sk;while(read != null || !sk.empty())

else

else }}

return ret;

}};

二叉樹遍歷(前序,中序,後序

二叉樹的遍歷有三種方式,如下 1 前序遍歷 dlr 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。簡記根 左 右。2 中序遍歷 ldr 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。簡記左 根 右。3 後序遍歷 lrd 首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。簡記左 右 根。例1 如上圖...

二叉樹的遍歷 前序 中序 後序

include includetypedef struct bintree treenode,b tree b tree root null 函式的宣告 b tree creat tree int n void print1 void preorder b tree pointer 前序遍歷 voi...

二叉樹的前序 中序 後序遍歷

樹形結構是一類重要的非線性資料結構,其中以樹和二叉樹最為常用。二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 ...