数据结构与算法分析-树

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

树归类

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
}
原文地址:https://www.cnblogs.com/holidays/p/general_tree.html