数据结构复习总结之二叉树(七)

前两天看了二叉树的相关知识,包括二叉树的广度优先遍历,深度优先遍历,二叉树的添加,前序遍历,中序遍历以及后序遍历,最后看了给定二叉树的前序和中序遍历结果(或者给定二叉树的后序和中序遍历结果)写出另一个遍历结果(中序遍历是一定要给的)

包括二叉树的广度优先遍历,深度优先遍历,二叉树的添加,前序遍历,中序遍历以及后序遍历
# -*- coding: utf-8 -*-
"""
Created on Thu May 31 19:57:32 2018

@author: xuanxuan
"""

#学习一下二叉树的相关知识
#(包括二叉树的广度优先遍历,按照广度优先遍历添加元素到现有的树,以及前序中序后序遍历)

class Node():
    def __init__(self,item):
        self.elem=item
        self.lchild=None
        self.rchild=None

class Tree():
    def __init__(self):
        self.root=None

    def add(self,item):

        node=Node(item)

        queue=[self.root]
        if self.root is None:
            self.root=node
            return 

        while queue:

            cur_node=queue.pop(0)
            if cur_node.lchild is None:
                cur_node.lchild=node
                return
            else:
                queue.append(cur_node.lchild)
            if cur_node.rchild is None:
                cur_node.rchild=node
                return 
            else:
                queue.append(cur_node.rchild)

    def breadth_travel(self):
        queue=[self.root]
        while queue:
            cur_node=queue.pop(0)
            print(cur_node.elem,end=' ')
            if cur_node.lchild is not None:
                queue.append(cur_node.lchild)
            if cur_node.rchild is not None:
                queue.append(cur_node.rchild)


    def preorder(self,root):
        if root is None:
            return

        print(root.elem,end=' ')
        self.preorder(root.lchild)
        self.preorder(root.rchild)

    def inorder(self,root):
        if root is None:
            return

        self.inorder(root.lchild)
        print(root.elem,end=' ')
        self.inorder(root.rchild)

    def postorder(self,root):
        if root is None:
            return
        self.postorder(root.lchild)
        self.postorder(root.rchild)
        print(root.elem,end=' ')




if __name__=="__main__":

    tree=Tree()
    tree.add(1)
    tree.add(2)
    tree.add(3)
    tree.add(4)
    tree.add(5)
    print("广度优先遍历结果为:")
    tree.breadth_travel()
    print("\n前序遍历结果为:")
    tree.preorder(tree.root)
    print("\n中序遍历结果为:")
    tree.inorder(tree.root)
    print("\n后序遍历结果为:")
    tree.postorder(tree.root)






看了一遍老师的思路 自己写了一下,过几天再来复习 再过一遍!~

然后就是关于二叉树根据前序遍历和中序遍历写出后序遍历

首先说一下:
前序遍历是 根,左,右
中序遍历是: 左,根,右
后序遍历是:左,右,根
你可以看作无论是哪种遍历都是按照根节点的顺序来说的,前序遍历就是根在最前面,而且左节点永远都是在右节点的左边!!!

然后接下来举一个例子:
假设前序遍历结果是: 1 2 4 5 3
中序遍历结果为:4 2 5 1 3
则后序遍历结果为:4 5 2 3 1
首先前序遍历是根节点先遍历 所以1 是根节点,然后根据中序遍历的结果 以1为中心分成左右两部分 也就是4 2 5 在左子树,3 位于右子树,然后 看前序遍历 2 4 5 (左子树)
可以知道1 是左子树的根节点 然后再看中序遍历结果,以2为中心分为4 (左子树)和5 右子树 然后3 就是右边子树的根节点

反正宗旨就是先看前序遍历结果,先找出根节点,再去中序遍历结果去根据根节点划分为左右两个子树,接下来就是不停的循环操作上述过程

下一步要做的:

数据结构就暂时先看到这里,接下来打算看操作系统和计算机网络的视频~~~然后下周一面试的宜信还要求数据库呢 还不会,,,,

你可能感兴趣的:(python_DS)