二叉树遍历的实现
Posted Rgylin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树遍历的实现相关的知识,希望对你有一定的参考价值。
title: 数据结构—二叉树算法(-)
date: 2021-12-07
tags: 数据结构
category: 数据结构
数据结构—二叉树遍历的实现(一)
前言:温习一下数据结构的算法
递归算法
确定递归参数 以及返回值
确定终止条件
前序遍历
逻辑就是:中左右 先访问中间节点然后在访问左边节点虽有就是右边节点
C++实现
struct TreeNode
int val;
TreeNode * left;
TreeNode * right;
;
int main()
vector<int> result;
travel(purpose,result);
void travel(TreeNode *p,vector<int>&vec)
if(p==NULL)return ;
vec.push_back(p->val);
travel(p->left,vec);
travel(p->right,vec);
python
def preorderTraversal(self, root: TreeNode) -> List[int]:
result=[]
def travel(temp):
if(temp==None):
return
result.append(temp.val)
travel(temp.left)
travel(temp.right)
travel(root)
return result
中序遍历
改个顺序就ok了,因为这里是前左右 所以要一直递归到左叶子,然后在访问右叶子,(中叶子已经访问完毕
def preorderTraversal(self, root: TreeNode) -> List[int]:
result=[]
def travel(temp):
if(temp==None):
return
travel(temp.left)
result.append(temp.val)
travel(temp.right)
travel(root)
return result
后续遍历
一个样子
def preorderTraversal(self, root: TreeNode) -> List[int]:
result=[]
def travel(temp):
if(temp==None):
return
travel(temp.left)
travel(temp.right)
result.append(temp.val)
travel(root)
return result
非递归算法—前序遍历(用栈实现)
利用栈,因为是中左右 所以我们 首先是将右孩子放入栈中,然后才将左孩子放入,这样如果出栈的时候才是左 然后右 这就起到中左右的顺序 如果遍历节点过程不为空的话 就循环
代码为
def preorderTraversal(self, root: TreeNode) -> List[int]:
if(root==None):
return []
result=[]
result.append(root)
while(stack):
temp= stack.pop()
result.append(temp.val)
if(temp.right):
stack.append(temp.right)
if(temp.left):
stack.append(temp.left)
return result
非递归算法—中序遍历(用栈实现)
中序遍历是从最左边叶子节点开始的,所以我们先遍历到最左边叶子节点, 遍历完成后, 此时root为NULL 所以弹出父节点,也就是左边叶子节点,访问存储,然后再遍历右节点.
代码为
def preorderTraversal(self, root: TreeNode) -> List[int]:
if(not root):
return []
result=[]
temp=[]
while root or temp:
if(root):
temp.append(root)
root= root.left # 遍历左边节点
else:
root= temp.pop() #开始访问节点
result.append(root.val)
root= root.right#访问右孩子 没有的话将栈中元素弹出 继续访问上一层节点
return result
非递归算法—后续遍历(用栈实现)
后续遍历是左右中 倒过来就是中右左 将前序遍历中的左和右互换一下就行了
代码为
def preorderTraversal(self, root: TreeNode) -> List[int]:
if(not root):
return []
result=[]
stack=[root]
while(stack):
temp= stack.pop()
result.append(temp.val)
if(temp.left):
stack.append(temp.left)
if(temp.right):
stack.append(temp.right)
return result[::-1]
以上是关于二叉树遍历的实现的主要内容,如果未能解决你的问题,请参考以下文章