• 数据结构与算法分析-树


    树本质属于图的范畴,常见的树的应用中,二叉树居多,这里简单介绍下一般意义的树。

    树归类

    1. 树的实现

    struct tree_node{
        data_type data;
        tree_node* first_child;
        tree_node* next_sibling;
    }
    

    2. 树的遍历

    1. 前序遍历:在处理子节点前,处理当前节点,之后再访问子节点;
    2. 后序遍历:先访问并处理子节点,之后再处理当前节点;

    二叉树遍历

    中序遍历

    // 非递归
    func findMode(root *TreeNode) []int {
        if nil == root {
            return nil
        }
    
        stack := list.New()
        var pre *TreeNode
        maxCnt, cnt := 0, 0
        res := make([]int, 0)
    
        for nil != root || 0 != stack.Len() {
            if nil != root {
                stack.PushBack(root)
                root = root.Left
            } else {
                e := stack.Back()
                stack.Remove(e)
                t := e.Value.(*TreeNode)
                
                if nil == pre || t.Val == pre.Val {
                    cnt ++
                } else {
                    cnt = 1
                }
    
                if cnt == maxCnt {
                    res = append(res, t.Val)
                } else if (cnt > maxCnt) {
                    res = make([]int, 0)
                    res = append(res, t.Val)
                    maxCnt = cnt
                }
    
                pre = t
                root = t.Right
            }
        }
    
        return res
    }
    
  • 相关阅读:
    (转)HTTP协议
    函数深入理解---函数的定义方式
    DOM模型和事件处理---事件处理
    DOM模型和事件处理---节点操作
    DOM模型和事件处理---基本操作
    常用知识
    窗口对象
    简单的事件处理
    Grunt
    基本操作
  • 原文地址:https://www.cnblogs.com/holidays/p/general_tree.html
Copyright © 2020-2023  润新知